Saltar para o conteúdo principal

O que são o Cron e o Crontab? Para que servem?

Muitos de vocês provavelmente já se depararam com estes dois termos e questionaram-se sobre o que são e que funções desempenham. Ambos são processos exclusivos de sistemas UNIX, como Linux e OpenBSD, entre outros.

Crontab é um ficheiro que guarda as tarefas que queremos automatizar, tais como:

  • fazer backups
  • apagar ficheiros
  • corrigir erros do sistema
  • atualizar o sistema
  • entre outras tarefas

O Cron utiliza este ficheiro e verifica periodicamente se uma tarefa já foi executada, se está a correr ou há quanto tempo foi executada. Se uma tarefa ainda não tiver sido executada, o Cron irá executá-la automaticamente. Estas tarefas são chamadas cronjobs. Note que tudo é executado na shell do sistema (terminal).

Isto pode parecer confuso à primeira vista, por isso deixem-me explicar com um exemplo concreto: Imaginem que querem que um script seja executado de meia em meia hora, e esse script faz backup de uma pasta. É necessário “dizer” ao Cron que esse script deve ser executado a cada 30 minutos. O Cron guarda essa informação num ficheiro crontab e verifica periodicamente se o script está a correr. Se não estiver, o Cron executa-o; se estiver a correr, o Cron não faz nada, apenas continua a monitorizar a tarefa para o caso de surgir alguma anomalia, e aí o Cron volta a executá-la.


Duas formas de atuação do Cron:

  • Global
  • Local

No modo global, o utilizador root do sistema define as tarefas no crontab que se aplicam a todos os utilizadores.

No modo local, o Cron só atua na conta do utilizador que o criou.


Comandos do crontab para gestão de utilizadores:

  • -l utilizador — lista as tarefas agendadas para o utilizador
  • -e utilizador — edita o crontab do utilizador
  • -r utilizador — apaga o crontab do utilizador
  • -c directoria — especifica uma diretoria para os ficheiros crontab

Para verificar todos os crontabs de um utilizador, veja esta diretoria: /var/spool/cron/utilizador

Para editar os crontabs globais, edite o ficheiro: /etc/crontab


Sintaxe do crontab

As entradas no crontab são divididas em 6 campos:

Campo Valores Descrição
Minuto 0–59 Minuto da hora
Hora 0–23 Hora do dia
Dia do Mês 1–31 Dia do mês
Mês 1–12 Mês
Dia da Semana 0–7 (Dom-Sáb) 0 e 7 representam o domingo
Comando Comando a executar

Por exemplo, para executar um script todos os dias às 16:00 (4 da tarde), use:

0 16 * * * /home/dev/backup.py

Operadores Especiais no Crontab

  • Asterisco (*) Seleciona todos os valores possíveis do campo. Por exemplo, * no campo das horas significa todas as horas.

  • Barra ( / ) Especifica incrementos. Por exemplo, 59/2 no campo da hora significa que a tarefa será executada de 2 em 2 horas começando no minuto 59.

  • Vírgula (,) Separa vários valores. Por exemplo, 1,2,3 no campo do mês significa janeiro, fevereiro e março.

  • Hífen (-) Define um intervalo. Por exemplo, 15-23 no campo das horas significa das 15 às 23 horas inclusive.

  • Ponto de interrogação (?) Usado para omitir a especificação do dia do mês ou do dia da semana. Só pode ser usado num destes campos.

  • L Indica o último dia da semana ou do mês. Por exemplo, L no campo do dia da semana significa domingo (7).

  • W Usado no campo do dia do mês para especificar o dia útil mais próximo de um dado dia. Por exemplo, 28W significa o dia útil mais próximo do dia 28 do mês. Atenção que sábado e domingo não são considerados dias úteis.

  • # (sustenido) Usado apenas no campo do dia da semana. Especifica a n-ésima ocorrência de um dia da semana no mês. Por exemplo, #4 significa a 4.ª ocorrência do dia da semana especificado.