Agendando tarefas no Linux utilizando o cron e crontab

Imagem de uma ampulhetaContextualização

Quando administramos servidores, sejam eles Windows ou Linux, quase sempre temos necessidade de repetir sistematicamente algumas tarefas para que nosso ambiente se mantenha operacional ou mesmo produza algum tipo de informação que desejamos. Como exemplo, posso citar o agendamento da execução diária de rotinas de backup, execução de programas para sintetizar informações oriundas de logs de servidores web (http server), chamada a um script que dispara e-mails aos aniversariantes do dia, “limpeza” em determinados diretórios do servidor, etc…

Agendamento de Tarefas

Tanto no sistema operacional Linux quanto no Windows Server, há ferramentas para realizar o agendamento de tarefas, porém, focando apenas no Linux, podemos contar com o serviço cron e sua tabela de agendamentos conhecida como crontab.

Definições:

  • cron: Serviço do Linux responsável pelo agendamento de comandos a serem executados em uma determinada data, hora ou intervalo de tempo.
  • crontab: É uma espécie de tabela onde se armazena os agendamentos realizados por cada usuário, sendo que desta forma, o serviço cron realiza leituras nessas tabelas para verificar os comandos agendados e posteriormente executá-los.
    O arquivo crontab pode estar localizado no diretório /etc ou então no /var/spool/cron quando é o caso de existir um arquivo para cada usuário (essa informação pode ser diferente dependendo da distribuição Linux que você estiver utilizando).

Como realizar agendamentos?

Para realizar o agendamento de tarefas, basta editar o arquivo crontab com quaisquer editores de texto, como por exemplo, o vi ou o pico. Você também pode utilizar o comando crontab -e para editar o arquivo correspondente ao usuário com o qual você está “logado” no sistema.

Lembre-se de reinicializar o daemon crond para que o serviço cron possa conhecer as alterações de agendamento.

Estrutura de um arquivo crontab

Um arquivo crontab deve respeitar a seguinte sequencia para cada agendamento que se deseja realizar:
<minuto> <hora> <dias do mês> <mês> <dias da semana> <usuário> <comando>

  • <minuto>: número entre 0 e 59;
  • <hora>: número entre 0 e 23;
  • <dias do mês>: números entre 1 e 31 (quando quiser informar mais de um, separe por vírgula);
  • <mês>: número entre 1 e 12;
  • <dias da semana>: números entre 0 e 6 (quando quiser informar mais de um, separe por vírgula);
  • <usuário>: usuário com o qual o sistema deve executar o comando agendado, não sendo necessário para o caso de utilizar o próprio arquivo crontab do usuário;
  • <comando>: é o comando a ser executado.

Exemplo de arquivo crontab:
#Executar o backup do MySql todos os dias às 03h01
01 3 * * * /root/backup/backup_mysql.sh

#Executar a atualização do antivirus todos os dias às 02h00

00 2 * * * /usr/local/bin/freshclam –quiet -l /var/log/clamav/clam-update.log

#Executar a análise do log do servidor de web todos os dias às 00h00

00 0 * * * webalizer -c /etc/webalizer.conf /var/log/httpd/access_log

#Executar script quinzenalmente para sumarizar os relatórios gerenciais (executa no dia 1 e 15)
00 6 1,15 * * /usr/local/bin/sumarizar-relatorios.sh

Como utilizar o comando crontab?

  • crontab -e : edita o arquivo crontab do usuário com o qual você se autenticou no sistema;
  • crontab -l : lista os agendamentos do usuário com o qual você se autenticou no sistema;
  • crontab -r : remove todos os agendamento ativos;
  • crontab -i : o mesmo que crontab -r, porém solicita confirmação do usuário.

Grande abraço a todos.
Eduardo Henrique Rizo

[twitter-follow screen_name='eduardorizo' show_count='yes']

Deixe um comentário