Linux / Como Usar Crontab
No Linux, usando crontab você pode executar comandos ou scripts repetidamente em horários especificados. Com crontab -e, você pode editar as tarefas agendadas do usuário atual, inserindo cinco campos de tempo e o comando a ser executado em uma única linha.
Diferença Entre cron e crontab
cron é um serviço que verifica e executa regularmente tarefas agendadas. crontab é uma lista de tarefas que registra horários de execução e comandos, geralmente gerenciada separadamente para cada usuário. Os exemplos deste artigo são baseados no crontab típico de usuário das séries Debian e Ubuntu. Métodos de instalação, nomes de serviços e recursos suportados podem diferir dependendo da distribuição e da implementação do cron.
Tarefas agendadas são executadas com os privilégios do proprietário do crontab correspondente. Se forem necessários privilégios que o usuário atual não possua, configure cuidadosamente a conta de administrador e a conta de execução, e não crie tarefas com privilégios excessivamente amplos. Tarefas agendadas para um horário em que o computador está desligado ou o serviço de cron está parado não serão executadas.
Verificando e Editando Crontab
No terminal, use o seguinte comando para verificar as tarefas agendadas do usuário atual. Se aparecer uma mensagem dizendo que não há lista, isso significa que este usuário ainda não possui um crontab.
crontab -l
Para adicionar ou modificar tarefas, execute o seguinte comando. A tela de seleção do editor pode aparecer na primeira vez que você executá-lo. Após salvar o arquivo e sair do editor, o cron verificará a sintaxe e instalará a nova lista. Se aparecer um erro, edite novamente de acordo com as instruções e confirme que a mensagem de instalação seja exibida.
crontab -e
As tarefas agendadas para a conta de administrador são separadas das do usuário atual. Edite a lista do root apenas com sudo crontab -e e verifique-a com sudo crontab -l quando privilégios administrativos forem necessários. Não confunda as duas listas.
Para remover uma única tarefa, exclua apenas essa linha com crontab -e e salve. crontab -r exclui toda a lista de tarefas agendadas do usuário atual, portanto, verifique a lista antes de usá-la e faça um backup em um local seguro, se necessário. Você pode fazer backup com crontab -l > ~/crontab-backup.txt, e se for necessária a restauração, reinstale todo o arquivo com crontab ~/crontab-backup.txt. A restauração sobrescreverá a lista atual, então verifique se há alterações primeiro.
Formato do horário agendado
Cada trabalho em um crontab de usuário consiste em cinco campos de tempo seguidos pelo comando. Em arquivos de crontab do sistema, como /etc/crontab ou /etc/cron.d/, um campo adicional de usuário de execução é adicionado entre os campos de tempo e o comando, então não copie o formato abaixo como está.
minute hour day-of-month month day-of-week command
| Campo | Intervalo permitido | Significado |
|---|---|---|
| minuto | 0–59 | Minuto |
| hora | 0–23 | Hora |
| dia-do-mês | 1–31 | Data |
| mês | 1–12 | Mês |
| dia-da-semana | 0–7 | Dia da semana. 0 e 7 são domingo |
* refere-se a todos os valores no campo. Uma vírgula especifica múltiplos valores (10,20), um hífen especifica um intervalo (1-5) e uma barra especifica intervalos dentro de um intervalo (*/10). Por exemplo, */10 no campo minuto significa 0, 10, 20, 30, 40, 50 minutos a cada hora. Os intervalos são interpretados dentro de cada campo, portanto, eles não garantem sempre o mesmo espaçamento baseado no tempo decorrido.
Se tanto a data quanto o dia da semana forem restritos, um cron do Debian será executado em um dia que atenda a qualquer uma das condições. Por exemplo, 0 4 1 * 1 será executado às 4h da manhã em todo dia 1º do mês e toda segunda-feira, não apenas quando o dia 1º for uma segunda-feira. Você pode verificar os formatos detalhados na documentação do sistema man 5 crontab ou do formato de crontab do Debian .
Exemplos de trabalhos agendados
Substitua /home/user/bin/backup.sh no exemplo a seguir pelo caminho absoluto do script real. O usuário deve ter acesso ao script e aos arquivos de destino, e se for executar o script diretamente, também serão necessárias permissões de execução e a especificação correta do interpretador. Primeiro, execute-o no terminal com a mesma conta para verificar os resultados.
0 4 * * * /home/user/bin/backup.sh
0 4 * * 1-5 /home/user/bin/backup.sh
*/10 4 * * * /home/user/bin/backup.sh
A primeira linha executa todos os dias às 4h, a segunda linha executa de segunda a sexta às 4h, e a terceira linha executa a cada 10 minutos das 4h às 4h50. Os exemplos são agendas independentes. Quando todas forem inseridas, todas as tarefas de cada linha serão registradas.
Registrar e testar um job com segurança
Ao praticar, em vez de um backup real, tente usar uma tarefa que deixe um registro no diretório home do usuário atual.
- Execute
crontab -e, adicione a seguinte linha única, depois salve e saia. A data e a hora serão adicionadas ao arquivo a cada minuto.
* * * * * /bin/date >> "$HOME/cron-test.log" 2>&1
- Execute
crontab -lpara verificar a entrada instalada. Após 1–2 minutos, executecat ~/cron-test.loge verifique se um registro foi adicionado. - Uma vez confirmado, exclua apenas a entrada de prática com
crontab -ee salve. Você pode excluir o arquivo de log após verificar seu conteúdo.
Se a prática não funcionar, verifique se o serviço cron está instalado e em execução. Em um pacote cron típico do Ubuntu, você pode visualizar o status com systemctl status cron. O nome do serviço e o local do log variam de acordo com a distribuição, e em um ambiente Ubuntu usando o journal do systemd, você pode verificar os logs do serviço com journalctl -u cron.
Pontos a Verificar Quando Não Funcionar
O cron pode ser executado em um ambiente diferente do shell de login. Especifique comandos e scripts com caminhos absolutos sempre que possível e defina claramente as variáveis de ambiente e diretórios de trabalho necessários no script. Para verificar erros, você também pode redirecionar a saída e os erros do trabalho para um arquivo de log que o usuário possa acessar. Como os logs podem conter informações sensíveis, tome cuidado com as permissões de acesso e os períodos de retenção.
Verifique se o horário do sistema e o fuso horário são os esperados, se a conta de execução pode acessar os arquivos e se há possibilidade de execuções sobrepostas. O % usado nos comandos é tratado de forma especial pelo cron, então, para passá-lo literalmente, geralmente precisa ser escapado com \%. Consulte a documentação do cron que você está usando para comportamento exato.




