Utilizando a crontab para agendar a execução de tarefas

O cron é um serviço do Linux que permite a execução de tarefas em horários previamente determinado.   Esta aplicação é extremamente útil quando temos que executar repetidamente a mesma tarefa.O daemon do cron é executado a cada minuto e quando acionado verifica se há alguma tarefa pendente de ser executada.

Uma das principais formas de se interagir com o cron é por meio do comando crontab, este comando nos permite gerenciar as tarefas que devem ser executadas pelo cron.

Para verificarmos quais tarefas estão agendadas, na crontab, podemos utilizar o comando:

crontab  -l

Mas para agendar a execução de uma tarefa precisamos, primeiro, conhecer um pouco sobre a sintaxe dos arquivos de cron.

Sintaxe dos arquivos cron

Vale lembrar que, todas as linhas iniciadas pelo caracter “#” são comentários, estas linhas não possuem um formato previamente definido, mas aquelas que descrevem uma tarefa possuem a seguinte sintaxe:

[minutos] [horas] [dias do mês] [mês] [dias da semana] [usuário] [comando]
Sintaxe do crontab
Sintaxe do crontab

Os valores aceitos nestes campos são:

  • Minutos: números de 0 a 59;
  • Horas:  números de 0 a 23;
  • Dias do mês:  números de 0 a 31;
  • Mês:  números de 1 (Janeiro) a 12 (Dezembro);
  • Dias da semana:  números de 0 (Domingo) a 6 (Sábado);
  • Usuário: quando uma tarefa é executada, ela deve utilizar os privilégios de um determinado usuário; este campo determina o username deste usuário. Quando um usuário não é especificado será utilizado os privilégios daquele que  executou o comando “crontab
  • Comando: especifica a tarefa que deve ser executada.

Vale lembrar que, nos campos numéricos, além dos valores fixos, podemos utilizar algumas notações especiais, por exemplo:

  • “*” : utilizado para especificar qualquer valor possível; por exemplo: quando utilizado no campo dia do mês, significa “todos os dias“.
  • “x-y”: representa um intervalo, onde “x” é o valor inicial e “y” o valor final; por exemplo: no campo dias da semana, “1-5”, significa de segunda a sexta.
  • “5,10,25”: quando utilizamos o caracter “,” (virgula), para separar os números, estamos, geramos uma lista de valores, que indica em quais momentos a tarefa deve ser executada; por exemplo: se utilizássemos os valores indicados no campo dia do mês, a tarefa seria executada no quinto, décimo e vigésimo quinto dia do mês.
  • “*/30”: quando utilizamos a combinação de caracteres “*/” seguido de um valor,  indicamos que a tarefa deverá ser executada repetidamente no intervalo de tempo especificado; por exemplo, ao utilizar este exemplo na primeira coluna do arquivo de cron, a tarefa será executada a cada 30 minutos

Utilizando o comando crontab

Depois de conhecer a sintaxe utilizada pelos arquivos do cron, apresentaremos alguns dos parâmetros do crontab, que é um dos comando que podem ser utilizados no processo de agendamento de tarefas

A sintaxe básica deste comando é:

crontab [ -u user ]  { -e | -l | -r }

Onde:

  • -u [user] : define a crontab de qual usuário será manipulada
  • -e : permite a edição das tarefas da crontab
  • -l : lista o conteúdo da crontab, incluindo os comentário e as linhas de agendamento de tarefas
  • -r : remove a crontab

Por exemplo, para listar a crontab do usuário root  podemos utilizar o comando:

sudo crontab  -l

Que poderia apresentar como resposta algo semelhante á:

# m h  dom mon dow   command
*/30    *      *       *       *        /usr/bin/webalizer > /dev/null
0      *       *       *       *       /usr/bin/apt-mirror
*/10   *       *        *      *       /usr/lib/cgi-bin/awstats.pl -config=/etc/awstats/awstats.conf -update

Agora, supondo que haja um script chamado “atualizar_sistema.sh”  localizado no diretório “/opt/script” que deve ser executado no primeiro dia de cada mês as 06:30hs da manhã, poderíamos adicionado à crontab executando o comando:


crontab -e

E em seguida adicionando a linha abaixo no final do arquivo:


30 6 1 * * /opt/script/atualizar_sistema.sh

Apesar do conceito por do cron ser, relativamente, simples, atualmente, esta ferramenta é um dos pilares do sistema operacional Linux. Quase todos os sistemas apoiam-se na cron para realizar algum tipo de agendamento de tarefas; um servidor web baseado no Apche e no PHP, geralmente, utilizar o cron para executar várias atividades, desde a limpeza da cache até a verificação de arquivos de lock perdidos. Conhecer a cron e suas funcionalidade é indispensável para os usuários avançados e os administradores de sistema Linux.