crontab

crontab [opções]

Descrição

Este comando agenda tarefas a serem executadas pelo sistema periodicamente (mais de uma vez).

Algumas opções do comando

  • -e : edita o arquivo de crontab.
  • -l : lista o arquivo crontab na saída padrão.
  • -r : remove o arquivo crontab do usuário.
  • -u usuário : especifica o nome do usuário cujo arquivo de crontab está sendo criado ou alterado.

Comentários sobre as opções do comando

  • Se o usuário não tiver ainda agendado qualquer tarefa (primeira vez), ao digitar

crontab -e

receberá como resposta:

no crontab for aluno – using an empty one

Select an editor. To change later, run ‘select-editor’.
1. /bin/ed
2. /bin/nano
3. /usr/bin/vim.tiny

Choose 1-3 [2]:

O usuário então deverá escolher um dos editores de texto disponíveis no sistema. Neste caso, ele deve digitar 1 para abrir o ed, 2 para o nano ou 3 para o vim. Caso o usuário não forneça a opção, será usada a segunda (nano), pois este é o padrão do sistema. Em seguida, ele poderá definir no arquivo criado as tarefas a serem executadas pelo sistema. Ao fechar o editor de texto, o usuário receberá a mensagem abaixo.

crontab: installing new crontab

  • É possível criar um arquivo com as tarefas antes de executar o crontab. No exemplo abaixo, o arquivo teste possui as tarefas a serem agendadas.

crontab teste

Se o arquivo fornecido tiver qualquer erro, o sistema informa o problema e não agenda as tarefas. Abaixo, temos um exemplo onde houve um erro na especificação do dia da semana.

“teste”:1: bad day-of-week
errors in crontab file, can’t install.

  • É também possível criar ou alterar o o arquivo crontab de outro usuário com a opção -u.

sudo crontab -u aluno -e

No exemplo acima, o arquivo crontab do usuário aluno é editado. Note que, neste caso, é preciso ter autorização de root para acessar o arquivo crontab de outro usuário.

Formato dos comandos do arquivo crontab

  • Cada linha do arquivo crontab possui:
    • hora e data – definidas por cinco campos;
    • nome do usuário – apenas se o dono do arquivo crontab for o sistema;
    • tarefa – o comando a ser executado.
  • A data e a hora são definidas usando a tabela abaixo. O uso do caractere “*” em algum dos campos é interpretado por “intervalo completo”. Isto significa que, se o campo dia do mês for um “*”, então a tarefa será executada todos os dias do mês especificado.
Campo Valores permitidos
minuto 0-59
hora 0-23
dia do mês 1-31
mês 0-12
dia da semana   0-7

 

  • É possível definir um intervalo de números para a hora e a data. Por exemplo, 1-4 no campo dia do mês significa que a tarefa será executada nos quatro primeiros dias do mês. Além disso, pode-se também usar uma lista de números como 1, 4, 5-7.
  • O caractere “/” define o valor de intervalo entre os números especificados na hora e/ou na data. Por exemplo, 0-23/2 no campo hora corresponde às seguintes horas: 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20 e 22.
  • Caso o caractere “*” seja seguido pelo “/” e um número, então este número representa o intervalo entre os números do intervalo completo. Por exemplo, */2 no campo hora significa a cada duas horas.
  • Os valores 0 e 7 no campo dia da semana corresponde ao dia de domingo. O valor 1 corresponde a segunda-feira. O valor 2 corresponde a terça-feira, e assim por diante.

Exemplos

  • Abaixo temos um arquivo crontab de um usuário onde está agendado o comando ls para ser executado todos os domingos (0) no horário das 12:15.

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use ‘*’ in these fields (for ‘any’).
#
# Notice that tasks will be started based on the cron’s system
# daemon’s notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
15 12 * * 0 ls

  • Executa o comando ls à 4 horas do segundo sábado de cada mês.

0 4 8-14 * 6 ls

  • Executa todo dia o comando ls à meia-noite e 23 minutos, às 2:23, às 4:23, …, às 22:23.

23 0-23/2 * * * ls

Observações

  • O cron é o servidor que executa os comandos agendados. O cron ler os arquivos crontab armazenados no diretório /var/spool/cron/crontabs a cada minuto para verificar as tarefas agendadas nestes arquivos.
  • Os arquivos crontab dos usuários são nomeados com o mesmo nome de login do usuário. Por exemplo, o arquivo /var/spool/cron/crontabs/aluno é o arquivo crontab do usuário aluno.
  • As tarefas agendadas pelo sistema são armazenadas em /etc/crontab.
  • Se algum problema ou erro ocorre na executação da tarefa, o cron tenta enviar um email para o administrador da máquina. Para que o email seja enviado para outro usuário, basta definir/alterar a variável de ambiente MAILTO. Naturalmente que, para o email ser enviado, o sistema precisa ter um servidor de emails funcionando.
  • Para obter mais informações sobre os comandos de crontab, digite

man 5 crontab

  • O comando at agenda tarefas a serem executadas pelo sistema uma única vez.

 

Sumário      |      Topo