O 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:

O formato de um arquivo crontab

O 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 1 e 12 (identificando os meses de Janeiro a Dezembro)

Dia da Semana: Valor entre 0 e 7, sendo:

  • 0 - Domingo;
  • 1 - Segunda-feira;
  • 2 - Terça-feira;
  • 3 - Quarta-feira;
  • 4 - Quinta-feira;
  • 5 - Sexta-feira;
  • 6 - Sábado e
  • 7 - Domingo. (Sim, tanto 0 quanto 7 equivalem ao 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.

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.

fonte: Guia Foca Linux - 26.11 cron