Esta é uma reedição do artigo de Marcelo Araujo (msaraujo@tro.matrix.com.br) que publiquei originalmente em 1999, explicando como usar os recursos do cron para agendar a execução futura ou periódica de comandos no Linux.
Marcelo Araujo (msaraujo@tro.matrix.com.br)
Esta é uma republicação do artigo publicado originalmente em 1999 aqui no br-linux.org
cron e crontab
O cron é um recurso padrão do Unix (e do Linux) que permite o agendamento de tarefas para serem executadas em um momento específico, ou em intervalos regulares. Por exemplo, você pode programar as tabelas do cron (as chamadas 'crontabs') para:
- checar a integridade dos sistemas de arquivo todos os dias as 5:00 AM e mandar mail do resultado para o root;
- verificar se há mail em suas contas pop a cada 15 minutos
- rodar o updatedb todos os dias às 00:30
- todas as quintas-feiras, às 3:00 AM, procurar por arquivos core desnecessários e excluí-los
- e muito mais
A administração do cron para usuários pode envolver alguns cuidados adicionais, que uma boa leitura na documentação do seu sistema. Mas o leitor Marcelo Araujo (msaraujo@tro.matrix.com.br) resolveu facilitar a nossa vida, enviando algumas dicas sobre a inclusão de tarefas nas tabelas do cron. A base do texto a seguir é do Marcelo, com complementos aqui e ali.
Entendendo o crontab
Veja este exemplo de linha do crontab:
0,15,30,45 * * * * /bin/netstat -a | /bin/mail root
Essa linha de comando ira fazer que a cada 15 minutos, o netstat -a seja executado e o resultado do mesmo vá para o mail root.
O formato da linha de definição de tarefa do cron é:
minuto hora dia-do-mês mês dia-semana comando
Agora, como fazer para editar as suas crontabs? É simples... Em primeiro lugar decida qual editor de texto que você quer usar. Eu prefiro o pico com a opção -w (para evitar wordwraps). Portanto, terei que usar o
comando export EDITOR="pico -w"
Para entrar no modo de edição da crontab, após selecionar o editor de texto, basta digitar crontab -e e editar linhas como as do exemplo:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
0,15,30,45 * * * * /bin/netstat -a | /bin/mail root
15 21 * * * /usr/bin/updatedb
# isto é um comentário
As três primeiras linhas definem a shell que vai ser usada pelos scripts, o path de procura de comandos, e o usuário que vai receber mails em caso de erros. A quarta linha define que aos 0, 15, 30 e 45 minutos de todas as horas, em todos os dias do mês, todos os meses e todos os dias da semana, vai ser executado o comando /bin/netstat -a | /bin/mail root. A quinta linha define que às 21:15 de todos os dias será executado o /usr/bin/updatedb.
Você pode adicionar e remover entradas no cron à vontade. Linhas quebcomeçarem com um sinal de "#" não são consideradas, e você pode usá-las para desativar temporariamente comandos, ou para acrescentar comentários.
Para listar o conteúdo de sua crontab, use crontab -l. Para removê-la completamente, use crontab -u. Para maiores informações sobre o cron, use man 8 cron, man 1 crontab e man 5 crontab
Postado por brain em janeiro 10, 2004 10:35 PM
» Postado por: Leonardo França em janeiro 27, 2004 11:55 AM, 200.193.224:
Ola,
Artigo muito interessante!!!
você poderia dar um exemplo de como seria a configuração do cron para acessar uma pagina em PHP todo dia por exemplo.
Essa página faria a verificação no banco de dados e mandaria uma mensagem de parabens para quem fizesse aniversario no dia
Até mais
Leonardo França
leo@osfederais.com
» Postado por: Gustavo Fiod em janeiro 29, 2004 07:28 PM, 200.153.74.:
Obrigado,
Esta dica me salvou.
Eu estava em um cliente, deu um branco, eu não lembrava o que significava os asteriscos da crontab. Passei o maior sufoco, até que encontrei este artigo claro, objetivo e valioso.
Quem dera todos os manuais de linux fossem assim.
» Postado por: Claudio Marcelo em fevereiro 11, 2004 02:13 PM, 200.199.111:
Muito esclarecedor este texto. Porém, como eu poderiacopiar um arquivo X para uma pasta chamada SEG, for Segunda-feira, e assim consecutivamente.
Agradeço desde já!
» Postado por: Biry_Night em julho 2, 2004 01:05 AM, 200.101.62.:
legal este assunto .. teria como eu fazer alguma coisa no con para ele executar um arquivo apenas uma vez ou todas as vezes q o pc ele for reiniciado ?? digamos ... um servidor de jogos online ... vc executa o comando o jogo ta no ar ... só para c der um stop no comando ou reiniciar o pc ... mas ai o cron entra em açao e inicia o servidor de jogo assim q o pc for iniciado ... teria como ??
» Postado por: VeloxDJ em julho 5, 2004 06:19 PM, 200.146.150:
Parabens, muito esclarecedor e aproveitei e ja adicionei aos favoritos. Abraços e valeu pela força.
» Postado por: Wedrey em julho 9, 2004 11:26 AM, 200.140.63.:
Gostei..
mas como que faço pra executar uma página PHP todos os dias?
Até mais
Wedrey Nunes
» Postado por: Marcelo Araujo em agosto 1, 2004 05:43 PM, 200.215.99.:
Ola pessoal, fico contente que tenham gostado do tutorial ... estou preparando um novo ... para o SGDB Postgresql ....
» Postado por: Marcus Vinicius em agosto 3, 2004 10:48 AM, 201.6.112.7:
Achei muito bom o texto, clariou muito minhas ideias!!!
» Postado por: Gustavo em setembro 23, 2004 07:03 PM, 200.192.140:
Nunca testei, mas acho que para executar uma página em PHP todos os dias num determinado horário voce poderia usar o wget ou um browser por linha de comando tipo lynx
dai basta executar o wget ou o lynx passando como parametro a página PHP e o site. Mesmo que esteja na propria máquina acho melhor colocar o endereco completo do site.
Exemplo
1 * * * * lynx -dump http://www.pagina.com.br/script.php
ou então a mesma coisa usando wget
1 * * * * wget -dump http://www.pagina.com.br/script.php
a diferenca é que o wget grava o resultado do que seria visto na página num arquivo e o lynx joga na tela.
O Arquivo Histórico do BR-Linux.org mantém no ar (sem alteração, exceto quanto à formatação) notícias, artigos e outros textos publicados originalmente no site na segunda metade da década de 1990 e na primeira década do século XXI, que contam parte considerável a história do Linux e do Open Source no Brasil. Exceto quando indicado em contrário, a autoria dos textos é de Augusto Campos, e os termos de uso podem ser consultados na capa do BR-Linux.org. Considerando seu caráter histórico, é provável que boa parte dos links estejam quebrados, e que as informações deste texto estejam desatualizadas.