Índice das dicas

Agendando tarefas e rotinas com o Cron

Criado 17/set/2006 às 16h25 por Marcos Vinicius M. da Silva Junior (marcos.cortez@gmail.com)

4

O cron é um serviço disponível no Linux e outros sistemas UNIX (HP-UX, AIX, Solaris, Linux, etc). Com ele é possível agendarmos rotinas ou tarefas, de modo que o sistema execute-as periodicamente.

No nosso primeiro exemplo, utilizaremos o crontab para agendarmos uma tarefa a ser executada pelo cron. Nele especificamos os comandos, além do horário e data que desejamos que seja executado pelo cron no período definido.

Apenas para exemplo, vamos criar este script antes:

# kedit /usr/local/bin/backup.sh

Adicione as linhas abaixo dentro do arquivo de texto:

#!/bin/bash
#fazendo backup do /etc

DATA=`date +%Y-%m-%d-%H.%M`
cd /root
tar -cvzf backup-"$DATA".tar.gz /etc


Transforme-o em executável:

# chmod +x /usr/local/bin/backup.sh

Este script fará backup do diretório /etc no diretório do root /root, e para evitar que um backup sobrescreva o outro ou que tenhamos de ficar renomeando os arquivos a cada backup, este script gera o arquivo de backup já com data e horário incluídos em seu nome, como em:

/home/root/backup-2006-09-17-11.44.tar.gz

Onde:

2006:ano
09:mês
17:dia
11:horas
44:minutos

Nota: você pode consultar mais opções para scripts de backup em http://www.hardware.com.br/artigos/scripts-backup/

Agora precisamos configurar o crontab para executa-lo periodicamente, assim não precisaremos mais lembrar de fazer backup, pois o sistema se encarregará de lembrar por nós ;-)

Editando o crontab:

# crontab -e

Feito. Precisamos agora adicionar o período (tempo) que o cron deve chamar o nosso script de backup.

A sintaxe do crontab é bastante fácil de se trabalhar. A sintaxe para chamar nosso script deve ficar assim:

mm HH DD MM DS /usr/local/bin/backup.sh

Onde:

mm: minutos
HH: horas
DD: dia
MM: mês
DS: dia da semana
/usr/local/bin/backup.sh: tarefa a ser realizada

Neste exemplo, faríamos com que o script seja executado todos os dias as 22hrs. Veja:

00 22 * * * /usr/local/bin/backup.sh

Pronto. Salve o arquivo, e reinicie o cron para que a rotina funcione:

# /etc/init.d/cron restart

Para visualizar os agendamentos feitos (por usuário), use:

# contab -l

Se desejar apagar os agendamentos, digite o comando:

# crontab -r

Existe ainda uma outra maneira de montarmos os agendamentos com o cron. Através dos comandos do crontab, como no exemplo citado acima, os agendamentos são criados apenas para o usuário corrente, ou seja, o usuário que esta digitando o comando. Editando diretamente o arquivo de configuração do crontab, um novo campo é adicionado a sintaxe. Este campo, é o campo usuário. Ele é adicionado para que possamos determinar usuários para cada tarefa ou rotina a ser realizada.

# kedit /etc/crontab

A nova sintaxe ficará assim agora:

mm HH DD MM DS U /usr/local/bin/backup.sh

Onde:

mm: minutos
HH: horas
DD: dia
MM: mês
DS: dia da semana
U: nome do usuário especificado
/usr/local/bin/backup.sh: tarefa a ser realizada

Para finalizar, dentro do diretório /etc, existe temos quatro agendamentos pré-definidos:

cron.hourly, cron.daily, cron.weekly e cron.montly.

Onde:

cron.hourly: de hora em hora
cron.daily: de dia em dia
cron.weekly: de semana em semana
cron.montly: de mês em mês

Exemplo: Para que nosso script de backup seja executado diariamente, basta copiarmos o script para /etc/cron.daily

# cp /usr/local/bin/backup.sh /etc/cron/daily

Para finalizar, após copiar o script para o diretório desejado, é necessário reiniciar o daemon do cron, para que as alterações entrem em vigor.

# /etc/init.d/cron restart

Você pode verificar mais opções consultando o manual do cron. Boa sorte ;-)

# man cron

4 comentáriosPor Marcos Vinicius M. da Silva Junior (marcos.cortez@gmail.com). Revisado 17/set/2006 às 16h25

Comentários

Crontab e RSYNC
Criado 28/dez/2011 às 21h56 por Ricardo (anônimo)
Estou querendo usar o Syncmin Manager do Webmin, para executar a rotina de sincronização entre o servidor web e um servidor remoto, já que não sei usar corretamente o RSYNC e utilizar as chaves RSA. Por exemplo, com o Syncmin, é permitido criar uma rotina com usuário e senha (ainda não consegui fazer rodar), sem a necessidade de criar a chave. Apesar de achar inseguro, acho mais provável de dar certo, devido as minhas limitações. Já li um monte de tutoriais e não consegui entender. Por exemplo, as chaves RSA são criadas aonde? Exemplo: Tenho meu servidor web (apelido WA) e tenho um servidor em casa (WB). O que quero é criar uma rotina RSYNC, onde o WA atualize por RSYNC o WB. Eu crio a chave no WA e importo esta chave no WB? ou é o inverso, já que o WB é que vai autorizar o acesso? O Syncmin Manager vai me ajudar? Obrigado
Crontab
Criado 6/dez/2010 às 15h21 por Silvio Capaldi (anônimo)
Estou tentando agendar uma tarefa pelo Putty,: 55**** /home/capaldi/ http://www.capaldi.com.br/checkupdate.php, mas não estou conseguindo
a respsta é sempre a mesma :
[capaldi ~] /home/capaldi $ crontab -e
no crontab for capaldi - using an empty one
crontab: installing new crontab
"/tmp/crontab.XXXXVpHTZC":1: bad minute
errors in crontab file, can't install.
saberia dizer o que esta errado?
grato
falta espaços entre os asteriscos por Raul Liborio (anônimo)
Sr. por Raphael (anônimo)