"Cron" ou "Cron job" são tarefas agendadas para execução automática. Veremos aqui como agendar tarefas no Linux e quais os recursos disponíveis no Linux para ajudar nesse objetivo.
O cron é um daemon[1] que executa comandos agendados contidos em arquivos como o /etc/crontab, ou arquivos armazenados em /var/spool/cron/crontabs/.
Este daemon é iniciado automaticamente de /etc/init.d ao entrar em níveis de execução de vários usuários. O cron procura sua área de spool para arquivos crontab (que são nomeados conforme as contas de usuários em /etc/passwd), crontabs, ou tabelas cron, encontradas são carregados na memória. Os arquivos crontab contidos neste diretório não devem ser editados/acessados diretamente, para isso, deve ser usado o comando crontab.
Como dito antes, o cron também lê /etc/crontab e os arquivos em /etc/cron.d, que têm um formato ligeiramente diferente, que inclui a indicação do usuário que executará o comando.
O cron 'acorda' a cada minuto, examinando todos os arquivos crontab armazenados, verificando cada comando para ver se algum deve ser executado neste momento. Ao executar comandos, a saída destes (stdout) é enviada para o proprietário do crontab (ou para o usuário nomeado na variável de ambiente MAILTO do crontab, caso exista). As cópias dos filhos do cron que executam esses processos recebem nomes em letras maiúsculas, como pode ser comprovado nas saídas de syslog e do comando ps.
Além disso, o cron verifica a cada minuto se o modtime (modification-time) do diretório spool (ou o modtime do arquivo /etc/crontab) foi alterado e, se houver acontecido isso, o cron examinará o modtime dos arquivos crontab e recarregará aqueles que foram alterados. Por isso o cron não precisa ser reiniciado a cada vez que um arquivo crontab é modificado. Observe que o comando crontab (secção 1 no man) atualiza o modtime do diretório spool sempre que ele muda algum crontab.
Considerações especiais são feitas quando o relógio do sistema é alterado num valor inferior a 3 horas, por exemplo, no início e no final do horário de verão. Se o tempo se deslocou para frente, os trabalhos que deveriam ter funcionado no horário saltado serão executados logo após a mudança. Por outro lado, se o relógio muda para trás, em um valor inferior a 3 horas, os trabalhos que caem no horário repetido não serão executados novamente.
Somente os trabalhos que executados em um determinado momento são afetados (portanto, não especificado com @hourly, nem com '*' (asterisco) nos campos de hora ou minuto). Os trabalhos com agendamento especificado com coringas (wild cards) são executados com base no novo horário, imediato.
As mudanças de relógio em valores superiores a 03 horas são consideradas como 'correções de horário' e o novo horário é assumido imediatamente.
No Debian e no Red Hat, cron trata os arquivos em /etc/cron.d como extensões do arquivo /etc/crontab (eles seguem o formato especial deste arquivo, ou seja, eles incluem o campo de usuário de execução). O propósito desse recurso é permitir que os pacotes que exigem um controle mais fino de seu agendamento, do que os dos diretórios /etc/cron.{daily, weekly, monthly} adicionem um arquivo crontab a /etc/cron.d.
Esses arquivos devem ser nomeados com a identificação do pacote que os inclui. Os arquivos devem estar em conformidade com a mesma convenção de nomenclatura usada pelas partes executadas: elas devem consistir apenas de letras maiúsculas e minúsculas, dígitos, sublinhados e hifens. Como /etc/crontab, os arquivos no diretório /etc/cron.d são monitorados em relação a alterações.
Deve-se usar nomes de caminho absolutos para comandos como /bin/ls, para garantir que seja chamado o comando correto.
[1] Em sistemas operacionais multitarefa, um daemon é um programa de computador que executa como um processo em segundo plano, em vez de estar sob o controle direto de um usuário interativo. Tradicionalmente, o nome de processo de um daemon termina com a letra d, para deixar claro que o processo é, de fato, um daemon. No universo Microsoft, um daemon é conhecido pela denominação serviço.
[1] Comentário enviado por demoncyber em 24/08/2017 - 10:33h
Olá,
Parabéns pelo texto, bem redigido e completo sobre o tema, digo isto com referência de caso por ter lido vários livros sobre GNU/Linux, e a questão das muitas referências só elucidam a qualidade do trabalho. Passei o texto para alguns colegas que estão iniciando e não conhecem com profundidade no assunto.
[3] Comentário enviado por QAPLA em 22/09/2017 - 11:21h
[1] Comentário enviado por demoncyber em 24/08/2017 - 10:33h
Olá,
Parabéns pelo texto, bem redigido e completo sobre o tema, digo isto com referência de caso por ter lido vários livros sobre GNU/Linux, e a questão das muitas referências só elucidam a qualidade do trabalho. Passei o texto para alguns colegas que estão iniciando e não conhecem com profundidade no assunto.
Espero que venham novos bons textos.
Abraços
Obrigado pelas palavras, são grande incentivo para continuar e saber a direção para caminhar. Espero conseguir contribuir muito mais em breve.