Guia do Linux/Iniciante+Intermediário/Manutenção do sistema/cron
cron
editarO cron
é um daemon que permite o agendamento da execução de um comando/programa para um determinado dia/mês/ano/hora. É muito usado em tarefas de arquivamento de logs, checagem da integridade do sistema e execução de programas/comandos em horários determinados.
As tarefas são definidas no arquivo /etc/crontab
e por arquivos individuais de usuários em /var/spool/cron/crontabs/[usuário]
(criados através do programa crontab
). Adicionalmente a distribuição Debian
utiliza os arquivos no diretório /etc/cron.d
como uma extensão para o /etc/crontab
.
Para agendar uma nova tarefa, basta editar o arquivo /etc/crontab
com qualquer editor de texto (como o ae
e o vi
) e definir o mês/dia/hora que a tarefa será executada. Não é necessário reiniciar o daemon do cron
porque ele verifica seus arquivos a cada minuto. Veja a seção [#s-manut-cron-formato O formato de um arquivo crontab, Seção 26.11.1] para entender o formato de arquivo cron
usado no agendamento de tarefas.
O formato de um arquivo crontab
editarO arquivo /etc/crontab
tem o seguinte formato:
52 18 1 * * root run-parts—report /etc/cron.montly | | | | | | | | | | | | | \_Comando que será executado | | | | | | | | | | | \_ UID que executará o comando | | | | | | | | | \_ Dia da semana (0-7) | | | | | | | \_ Mês (1-12) | | | | | \_ Dia do Mês (1-31) | | | \_ Hora | \_ Minuto
Onde:
- Minuto
- Valor entre 0 e 59
- Hora
- Valor entre 0 e 23
- Dia do Mês
- Valor entre 0 e 31
- Mês
- Valor entre 0 e 12 (identificando os meses de Janeiro a Dezembro)
- Dia da Semana
- Valor entre 0 e 7 (identificando os dias de Domingo a Sábado). Note que tanto 0 e 7 equivalem a Domingo.
- usuário
- O usuário especificado será usado para executar o comando (o usuário deverá existir).
- comando
- Comando que será executado. Podem ser usados parâmetros normais usados na linha de comando.
Os campos do arquivo são separados por um ou mais espaços ou tabulações. Um asterisco * pode ser usado nos campos de data e hora para especificar todo o intervalo disponível. O hífen - serve para especificar períodos de execução (incluindo a o número inicial/final). A vírgula serve para especificar lista de números. Passos podem ser especificados através de uma /. Veja os exemplos no final desta seção.
O arquivo gerado em /var/spool/cron/crontabs/[usuário]
pelo crontab
tem o mesmo formato do /etc/crontab
exceto por não possuir o campo usuário (UID), pois o nome do arquivo já identifica o usuário no sistema.
Para editar um arquivo de usuário em /var/spool/cron/crontabs
ao invés de editar o /etc/crontab
use crontab -e, para listar as tarefas daquele usuário crontab -l e para apagar o arquivo de tarefas do usuário crontab -r (adicionalmente você pode remover somente uma tarefa através do crontab -e e apagando a linha correspondente).
OBS: Não esqueça de incluir uma linha em branco no final do arquivo, caso contrário o último comando não será executado.
O cron
define o valor de algumas variáveis automaticamente durante sua execução; a variável SHELL
é definida como /bin/sh, PATH
como /usr/bin:/bin, LOGNAME
, MAILTO
e HOME
são definidas através do arquivo /etc/passwd
. Os valores padrões destas variáveis podem ser substituídos especificando um novo valor nos arquivos do cron
.
Exemplos de um arquivo /etc/crontab
:
SHELL=/bin/sh PATH=/sbin:/bin:/usr/sbin:/usr/bin 00 10 * * * root sync # Executa o comando sync todo o dia as 10:00 00 06 * * 1 root updatedb # Executa o comando updatedb toda segunda-feira as 06:00. 10,20,40 * * * * root runq # Executa o comando runq todos os dias e a toda a hora em 10, 20 e 40 minutos. */10 * * * * root fetchmail # Executa o comando fetchmail de 10 em 10 minutos todos os dias 15 0 25 12 * root echo "Feliz Natal"|mail john # Envia um e-mail as 0:15 todo o dia 25/12 para john desejando um feliz natal. 30 5 * * 1-6 root poff # Executa o comando poff automaticamente as 5:30 de segunda-feira a sábado.