Dica 09: Tutorial de Crontab

CRON

É uma agenda de tarefas do sistema. Com ele você pode agendar a execução de comandos e programas.

O cron implementa uma agenda de tarefas para cada usuário. Sendo assim o comando ou programa será executado sob o UID do usuário que o agendou.

Depois de executar a tarefa agendada, o cron envia um e-mail para o usuário relatando a saída padrão que seu programa ou comando gerou. Um exemplo básico e um tanto fútil é agendar um “ls $HOME” para ser executado às 13h, o e-mail conterá os arquivos que estavam no diretório às 13h. Se quisermos que o e-mail seja enviado para outra pessoa deveremos incluir no arquivo agenda a tag “MAILTO=<usuario>“.

O servidor cron deve estar rodando para que as tarefas sejam executadas. Ele pode ser executado na linha de comando, sendo que não necessita de &, pois ele roda em background nativamente. Uma forma mais fácil de iniciar o cron é colocá-lo no /etc/rc.d/rc.local, assim ele será iniciado no boot do sistema.

Para agendar as tarefas usamos o comando crontab com a sintaxe descrita a baixo:

crontab [-u usuário] { -e | -l | -r }

A opção -u permite que o superusuário agende tarefas para outros usuários, pois o comando su pode atrapalhar o crontab. Um usuário comum não precisa usar essa opção para especificar ele próprio.

A opção -e edita o arquivo de tarefas agendadas pelo usuário. A formatação desse arquivo será descrita mais adiante.

A opção -l lista o arquivo de tarefas agendadas pelo usuário.

A opção -r apaga o arquivo de tarefas agendadas pelo usuário.

Basicamente, para agendarmos uma tarefa deveremos editar o nosso arquivo “agenda” com o comando: crontab -e

O arquivo agenda tem as seguintes características: as linhas em branco, espaços iniciais e tabs são ignorados. As linhas cujo primeiro caractere não-branco for um “#” são comentários, e são ignoradas. Uma linha ativa em um arquivo agenda é uma definição de ambiente ou um comando do cron.

Definição de ambiente:

Forma:
nome = valor A string valor pode ser colocada entre aspas (simples ou duplas, mas correspondentes) para preservar espaços iniciais ou finais.

Várias variáveis de ambiente são definidas automaticamente pelo servidor cron. SHELL é definida como /bin/sh, LOGNAME e HOME são definidos a partir da linha do /etc/passwd referente ao usuário que agendou a tarefa. HOME e SHELL podem ser modificadas, mas LOGNAME não.

O formato de um comando do cron é em grande parte o padrão V7. Cada linha tem cinco campos de hora e data, seguidos por um comando. Os comandos são executados pelo servidor cron quando os campos minuto, hora, e mês correspondem à hora atual, e quando pelo menos um dos campos de dia (dia do mês, ou dia da semana) correspondem ao dia atual. Os campos de hora e data são:

campovalores permitidos
minuto0-59
hora0-23
dia do mês0-31
mês0-12 (ou nome)
dia da semana0-7 (0 ou 7 é domingo, ou nome)

Podemos usar intervalos de número usando o hífen “-” (ex: 1-10), um asterisco “*” indica um intervalo do primeiro ao último valor permitido. Dentro do intervalo poderemos determinar o passo (incremento) com uma barra “/” (ex: 1-10/2 ou */2). Podemos, também, usar listas de números usando vírgula “,” (ex: 1,3,10). É interessante a possibilidade de mesclarmos intervalos e listas (ex: 1-10/2,15,20-22,30). Lembre-se que não são permitidos intervalos ou listas de nomes.

Os nomes dos meses e dos dias da semana são as primeiras três letras dos nomes correspondentes em inglês. Veja as tabelas:

MêsAbrev.diaAbrev.
JaneiroJanDomingoSun
FevereiroFebSegundaMon
MarçoMarTerçaTus
AbrilAprQuartaWed
MaioMaiQuintaThu
JunhoJunSextaFri
JulhoJulSábadoSat
AgostoAgo
SetembroSep
OutubroOct
NovembroNov
DezembroDec

Observação: o dia de execução de um comando pode ser especificado em dois campos (dia do mês/dia da semana). Se ambos os campos são determinados, isso é, diferentes de “*”, o comando será executado quando qualquer dos dois campos corresponder à data atual.

Exemplos de entradas para o arquivo agenda:

A linha abaixo copia todo o conteúdo do home do usuário para o disquete todo domingo às 13h e 40min. (backup de dados)

40 13 * * Sun cp $HOME/* ./floppy -R -f

A linha abaixo apaga os arquivos core do home do usuário todos os dias à meia noite

0 0 * * * rm $HOME/core -f

5 comentários em “Dica 09: Tutorial de Crontab”

  1. Pô, legal a dica ai Gustavo….mas to precisando de 2 coisas que ainda naum consegui fazer…é a mesma tarefa, mas usando o comando at e o cron.

    Preciso fazer com que um utilitário de bkp feito com ncurses,dialog etc (modo texto) seja executado as 23:00 no /dev/tty12 e/ou na console atual do usuário… sempre em modo texto pq a maquina dele naum tem modo gráfico….

    Pode, me dar um dica ai?
    Thanks

    Adilson Bonanovisky

    arbonan@gmail.com

  2. sem querer dei um sudo crontab -r e um crontab -r o que posso fazer agora? Ja dei um crontab -e e crontab -l :
    aparece
    crontab -u sillas -l
    # m h dom mon dow command

    agora só os jobs feitos pelo root funcionam, os pelo meu usuario dao esses erros:
    “Jul 31 15:42:01 don cron[6038]: Error: bad username; while reading /etc/crontab”
    “Jul 31 15:42:01 don /usr/sbin/cron[6038]: (sillas~) ORPHAN (no passwd entry)”

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *