CRONTAB - O agendador de tarefas do linux, como configurar

Para a maioria das tarefas pouco importa a hora que vai ocorrer mas sim a frequência em que ela vai ser executada, como diariamente ou semanalmente. Para isso já existe 4 diretórios especiais, que basta o administrador botar o script lá dentro, eles já serão executados na periodicidade desejada.
/etc/cron.daily diário
/etc/cron.hourly a cada hora
/etc/cron.monthly mensal
/etc/cron.weekly semanal
Mas caso você mesmo queira fazer um periodo especifico, com hora e tudo mais, basta editar o arquivo:
/etc/crontab
Então vamos lá. Escolha um editor de sua escolha, no meu caso o VIM e abra um terminal e digite:
sudo vim /etc/crontab
Notem no conteúdo:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
Notem que já existe algumas entradas justamente dos diretórios especiais, para adicionar sua própria tarefa temos que seguir o seguinte padrão de linha:
minuto hora diadomês mês diadasemana usuário comando
Notem que para cada espaço, se avança um campo e os campos seguem o padrão existente que conhecemos, por exemplo no campo mês não pode ter 15 pois temos de 1-12 e o campo da semana usamos de 0 a 7 onde zero e 7 é domingo 1 é segunda-feira, 2 terça-feira e assim por diante.
Temos também alguns caracteres que facilitam a vida:
CaractereExemploSiginificado
Hífen2-4intervalo de 2 a 4
virgula2,4,6,8os números 2,4,6 e 8
barra*/10de dez em dez
asterisco*todas as opções possiveis

Vamos botar a mão na massa:

Imagine que temos uma rotina de backup que comprime o o /home e o /var/log e queremos que esta rotina aconteça diariamente as 23:35;
Se usarmos o tar por exemplo, poderíamos usar duas linhas de comando ou não, por isso recomendo que crie um script e no arquivo do CRON nós vamos apontar para o script.

Criando o script:

  1. vim /scriptbkp.sh
O conteúdo do script, onde comprime a pasta home e a pasta log no hd externo de modo que o nome do arquivo fique com a data do dia da execução e ainda criando um arquivo de log localizado no /scriptbkplog.log para posterior análise:
  1. #!/bin/sh
  2. tar -cvzf /media/hdexterno/bkphome$(date +%Y_%m_%d).tar.gz /home >> /scriptbkplog.log
  3. tar -cvzf /media/hdexterno/bkplog$(date +%Y_%m_%d).tar.gz /var/log >> /scriptbkplog.log
Salve e saia.
Vamos dar permissão de execução também:
  1. sudo chmod 755 /scriptbkp.sh
Agora vamos lá no crontab:
  1. sudo vim /etc/crontab
Adicione a seguinte linha:
  1. 35 23 * * * root sh /scriptbkp.sh
Salve e saia. Pronto, todos os dias da semana, todos os meses, todos os dias do mês, na hora 23 e minuto 35 ele vai executar o script e enviar o backup para o hd externo do exemplo.
Mas e se quisermos a atividade de segunda e sabado as 09:27. A linha ficará assim:
  1. 27 09 * * 1,6 root sh /scriptbkp.sh
Se quisermos toda hora, de 08 as 18 de segunda a sexta:
  1. 00 8-18 * * 1-5 root sh /scriptbkp.sh
Se quisermos fazer mensalmente independente da hora, feche o crontab e mova o arquivo para a pasta especial, com o seguinte comando:
  1. sudo mv /scriptbkp.sh /etc/cron.monthly

EXEMPLOS SIMPLES:

se quer o intervalo de 30min vc deve usar:
*/30 * * * * /usr/sbin/ntpdate ntp1.cs.wisc.edu

se quer o intervalo de 5min vc deve usar: 

*/5 * * * * /usr/sbin/ntpdate ntp1.cs.wisc.edu
Close Menu