Idioma
Categoria
Pesquisar

Como agendar tarefas no Linux usando Crontab: Exemplos detalhados

Defina intervalos de agendamento personalizados, explore comandos essenciais, troque o editor padrão, organize o agendamento de scripts por pastas e consulte logs de execução

Como agendar tarefas no Linux usando Crontab: Exemplos detalhados
Em Terminal Por Rudi Drusian Lange
Publicado em
Última atualização

Introdução

O nome cron é derivado da palavra grega para o tempo, chrono. Crontab é um arquivo que contém entradas do cron a serem executadas em um momento especificado. O cron é muito útil para agendamento de tarefas repetitivas, para automatizar a manutenção e a administração de um sistema.

Cada usuário do sistema possui um crontab individual separado e os comandos agendados dentro dele devem ser executados dentro do contexto da permissão do usuário. Um usuário comum pode alterar somente seu crontab enquanto o root pode alterar o crontab de qualquer usuário.

O crontab não realiza validação de erros, como de sintaxe ou edição simultânea. Os erros só são detectados durante a execução dos comandos agendados.

Ambiente de instalação

Este artigo foi baseado no Slackware Linux 15.0 e no pacote dcron-4.5. A maioria das informações apresentadas aqui é aplicável a qualquer distribuição, mas pequenas diferenças podem existir.

Exemplos práticos

Para editar o arquivo crontab utilize o comando crontab -e . Linhas em branco são ignoradas e linhas iniciadas pelo caractere # são consideradas comentário.

formato ↓

formato-contrab

crontab

# executa o comando 'date' a cada minuto
* * * * * date

# executa o comando a cada 5 minuto
*/5 * * * * date

# executa todas as horas aos 25 minutos de cada hora
25 * * * * date

# executa todos os dias as 6:10
10 6 * * * date

# executa a cada duas horas no início da hora
0 */2 * * * date

# executa a cada minuto entre 12 e 13 horas
* 12 * * * date

# a cada duas horas entre as 23 e as 7 horas, e novamente as 8 horas
0 23-7/2,8 * * * date

# executa as 4:00 da manhã no dia 1 de janeiro
0 4 1 1 * date

# todos os dias as 11 da manhã e grava a saída do comando no arquivo date-output
0 11 * * * date >> /var/log/date-output 2>&1
  • * ➟ todos(minutos, horas, dias, meses)
  • 0-5 ➟ define um intervalo, 0, 1, 2, 3, 4, 5
  • 2,4,5 ➟ lista, 2, 4, 5
  • */2 ➟ a cada intervalo de 2 (minutos, horas, dias, meses)

Comandos crontab

  • crontab -e ➟ abre o crontab para edição
  • crontab -l ➟ mostra o conteúdo do arquivo crontab
  • crontab -d ➟ deleta o arquivo crontab (ou crontab -r dependendo da distro)
  • crontab -e -u <usuario> ➟ edita o crontab de um usuário específico, deve ser executado como root. -u pode ser usado em combinação com outros parâmetros, -l para listar, -d (ou -r) para remover.

Escolhendo o editor

O crontab utiliza o editor especificado nas variáveis de ambiente VISUAL ou EDITOR, se nenhuma estiver definida será utilizado o editor vi. Para trocar o editor use:

$ Shell

# Altera o editor para emacs
export EDITOR=emacs
crontab -e

# Para usar o editor elvis
export EDITOR=elvis
crontab -e

# Para usar o editor vi
export EDITOR=vi
crontab -e

A alteração acima será válida durante o tempo de execução, ao reiniciar a variável perderá o valor definido. Para torná-la permanente coloque o comando export dentro do arquivo ~/.bashrc.

Organizando por pastas

O crontab do root vem pré-configurado para executar scripts colocados em diretórios específicos periodicamente, conforme o nome da pasta:

  • /etc/cron.hourly/ - A cada hora.
  • /etc/cron.daily/ - Uma vez por dia.
  • /etc/cron.weekly/ - Uma vez por semana.
  • /etc/cron.monthly/ - Uma vez por mês.

Isso é útil para scripts que não exigem agendamento específico, mas precisam rodar regularmente. A configuração que permite este funcionamento pode ser conferida dentro do crontab do usuário root:

Crontab

# Execute tarefas cron de hora em hora 47 minutos após a hora:
47 * * * * /usr/bin/run-parts /etc/cron.hourly 1> /dev/null

# Execute tarefas cron diárias às 4:40 todos os dias:
40 4 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null

# Execute tarefas cron semanais às 4:30 do primeiro dia da semana:
30 4 * * 0 /usr/bin/run-parts /etc/cron.weekly 1> /dev/null

# Execute tarefas cron mensais às 4:20 do primeiro dia do mês:
20 4 1 * * /usr/bin/run-parts /etc/cron.monthly 1> /dev/null

Se desejável, é possível alterar os horários e dias da execução. Por exemplo, executar os scripts 5 minutos após a hora, em vez de 47 minutos como configurado originalmente. Lembrando que esta é uma configuração de agendamento por pasta; para agendamentos mais precisos, deve-se criar a configuração individual para a execução de cada comando.

Lembre-se que, ao colocar um script nesta pasta, é necessário garantir que ele tenha a permissão de execução configurada para que possa ser executado.

Log

Com o usuário root é possível consultar o log do cron no caminho: /var/log/cron.

# Shell

tail -f /var/log/cron

Com um usuário comum é possível redirecionar o erro (stderr) para um arquivo de log no diretório pessoal, usando o redirecionador 2>>.

Crontab

* * * * * ls /home/usuario/nao-existe 2>> /home/usuario/crontab.log

Concluindo

O agendamento de tarefas no Linux utilizando o crontab é uma ferramenta poderosa que permite automatizar processos, economizando tempo e reduzindo a margem de erro em operações manuais. Com uma configuração simples, usuários podem programar comandos e scripts para serem executados em intervalos regulares, garantindo a manutenção adequada do sistema e a execução de tarefas repetitivas. Ao compreender os formatos e as opções do crontab, é possível personalizar agendamentos conforme a necessidade, promovendo maior eficiência e organização.

Referências

Para elaboração deste artigo a principal fonte foi o manual (man page) do crontab disponível no Slackware Linux. Inteligências artificiais foram empregadas para a correção de erros gramaticais e semânticos, além da otimização da estrutura textual e do vocabulário.