Eu sou a favor da automação no trabalho. Quanto menos trabalho repetitivo ocupa o tempo do funcionário, melhor, tanto para o funcionário quanto para a empresa. Uma das ferramentas que ajudam a diminuir as tarefas repetitivas é o cron do Linux.
O que é
O cron é um agendador de tarefas (job scheduler) nos sistemas Unix-like (Wikipedia). É um serviço que executa comandos (jobs) na hora determinada de acordo com uma tabela (crontab). As tarefas podem ser agendadas para ser executadas apenas uma vez ou podem ser tarefas recorrentes — executadas periodicamente num intervalo de tempo.
Sintaxe
O crontab é um arquivo texto descrevendo os comandos a serem executados pelo cron e quando esses comandos serão executados.
Para editar o crontab basta rodar o comando crontab -e
A sintaxe do crontab apresenta o seguinte formato:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of the month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of the week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * <command to execute>
Exemplos
Para executar um comando todos os dias às 9 horas da manhã:
0 9 * * * <comando>
Para executar um comando a cada hora no dia 10 de cada mês:
0 * 10 * * <comando>
Para executar um comando a cada 5 minutos:
*/5 * * * * <comando>
Para executar um comando todo sábado e domingo às 15 horas e 10 minutos nos meses de janeiro, fevereiro e março:
10 15 * 1,2,3 0,6 <comando>
O site Crontab.guru é de grande ajuda na elaboração dessas expressões do crontab.
Variáveis de ambiente (environment variables)
Quando criamos cron jobs é preciso atentar-se às variáveis de ambiente que a tarefa precisa para rodar. Por padrão os cron jobs não têm acesso às variáveis de ambiente do terminal e isso pode ser a fonte de erros nas tarefas agendadas.
Para adicionar as variáveis de ambiente nas cron jobs é preciso colocá-las no arquivo crontab. Por exemplo, coloque essa linha antes das descrições de tarefas no crontab:
PATH=/usr/local/bin:/bin
Assim, os scripts terão acesso aos executáveis localizados em /usr/local/bin
e /bin
Script executável
Para que o cron execute um script é preciso que o script seja executável. Para isso, basta rodar o comando chmod +x script.sh
no terminal.
Logs dos Cron Jobs
Para ver os registros das tarefas executadas pelo cron podemos usar o seguinte comando:
grep CRON /var/log/syslog
Esse comando grep
vai pegar todas as linhas no arquivo /var/log/syslog
que contém o termo CRON
.