+2

Utilizando Crontab/Agenda de Tarefas com o PHP

criado por João K. em 07/02/2003 9:22pm
Sabia que é possível agendar a execução de um script PHP no seu servidor em determinada hora do dia?

O problema fictício:
- Vamos imaginar um script chamado email_me.php, que irá enviar uma email para você todo dia só para avisar você que o servidor está online. Você quer o programa seja executado às 00:01AM todo o dia.

Existe duas maneiras para isso realizar a tarefa:
- Usar Crontab no sistema Unix ou o Task Scheduler/Agenda de Tarefas no sistema Windows
- Utilizar um serviço de monitoramento de URL

Agora vamos nos concentrar na solução Crontab do Unix. Este tutorial é uma idéia de como o mesmo funciona.

Unix/Linux

Para utilizar esse recurso você precisará saber de algumas características do servidor onde está instalado o PHP. Existe dois tipos de instalação do PHP:

- Compilado como um CGI (chamado arquivo binário)
- Modulo do Apache

Vamos ver como solucionar o problema de acordo com cada tipo de instalação.

Compilado como um CGI

A diferença entre um script PHP normal e uma que será executada como SHELL script (linha de comando, tipo aqueledo DOS) é a chamada padrão no topo do script. Você precisará adicionar o caminho (path) até o binário do php, que irá possibilitar a excecução do programa. Este deve ser a primeira linha do script e deve conter a localização do PHP executável.

exemplo:
#!/usr/local/bin/php -q
<?php
mail('meu@email.com.br', 'Servidor está ON', 'Apenas para avisar que o servidor está online :)');
?>

Quem já utilizou Perl já viu semelhanças aqui :)

O que signfica "#!/usr/local/bin/php -q"?

- Signfica que para o arquivo ser executado é preciso o programa PHP, localizado no servidor no diretório /usr/local/bin/. Dependendo de onde o PHP foi instalado no servidor você terá que alterar o caminho até o binário. O sinal " -q ", indica que você NÃO quer o cabeçalho "HTTP content type header" seja enviado na saída.

Tenha certeza que o arquivo mail_me.php tenha as permissões (CHMOD: chmod +x mail_me.php) necessárias para ser executado. Após isso, vamos adicionar o comando necessário para o crontab. Edite o arquivo /etc/crontab/ (ou outro arquivo que seja o seu crontab) e adicione a seguinte linha:

1 0 * * * php /caminho/ate/o/script/mail_me.php

Essa instrução indica ao sistem aque o script deve ser executado diariamente às 00:01am.

Modulo do Apache

Se você tem o PHP instalado como um módulo do apache, a técnica é um pouco diferente, pois não será possível utilizar o php binário para executar o script mail_me.php no shell do Unix. A alternativa é utilizar o mesmo princípio do serviçod e monitoramente de URL, que irá executar o programa COMO SE estivesse visitando o script mail_me.php pelo seu browser/navegador. A primeira coisa é saber se você tem o programa WGET ou o LYNX instalado no servidor.

- Wget é um programinha utilitário para baixar arquivos da internet utilizado os protocolos HTTP ou FTP
- Lynx é um browser/navegador de internet que só mostra texto.

O script PHP mail_me.php NÃO precisa daquela linha (#!/usr/local/bin/php -q) no topo do arquivo. Ele será igualzinho a outros scripts que você já criou. Edite o arquivo /etc/crontab/ (ou outro arquivo que seja o seu crontab) e adicione a seguinte linha:

1 0 * * * lynx -dump http://www.seudominio.com.br/mail_me.php > /dev/null

legenda:
-dump : indica que a saída, resultado da execução de mail_me.php seja enviado para /dev/null (i.e., discarta o resultado)

Talvez o lynx não funcione então utilize o WGET

1 0 * * * wget -q http://www.seudominio.com.br/mail_me.php

legenda:
-q : desliga a saída dos resultado do acesso ao arquivo mail_me.php

Nota: Talvez seja necessário adicionar o caminho completo até o progrmas lynx/wget/php

1 0 * * * /usr/bin/lynx -dump http://www.seudominio.com.br/mail_me.php >/dev/null 
1 0 * * * /usr/bin/lynx -dump http://www.seudominio.com.br/mail_me.php >/dev/null 
1 0 * * * /usr/local/bin/php -f /caminho/ate/o/script/mail_me.php

Windows (Task Scheduler/Agenda de Tarefa)

Basicamente no Task Scheduler/Agenda de Tarefas no Windows você adiciona uma nova tarefa, apontando para a execução do PHP.exe para diariamente, em um horário determinado. E nas propriedades avançadas, edite o caminho Executar para o arquivo mail_me.php:

C:\\php\\php.exe C:\\inetpub\\www\\mail_me.php

Bem simples no Windows, como você viu acima.

Referências:

WGET
- http://www.gnu.org/software/wget/wget.html
Lynx
- http://lynx.browser.org/
Crontab
- http://uwsg.iu.edu/usail/automation/cron.html
Task Scheduler
- http://www.microsoft.com/windows2000/techinfo/howitworks/management/task_scheduler.asp

Comentários:

Mostrando 1 - 4 de 4 comentários
Antonio disse:
tenho um arquivo update.php com uma serie de comandos dentro, e no <body tem que ao terminr de carregar essa pagina ele chama outra pagina. tenho o wget instalado, mas ele nao estah realizando os comandos do arquivo update.php pq serah que estah acontecendo isso ???
02/04/2005 1:44pm (~19 anos atrás)

leo genilhu disse:
no a httpd.conf tem uma config pra isso
precisa abilitar esta funcao
20/08/2003 9:56am (~21 anos atrás)

Newton Wagner disse:
Onde hospedo minha página, existe uma pasta chamada CRONTAB.

O que eu tenho que colocar nessa pasta pra fazer funcionar o script teste.php diariamente?

O arquivo pode ter qquer nome? extensão? desde já agradeço! :D
12/02/2003 6:40am (~22 anos atrás)

Parabéns pelo artigo,

Mas você pode explicar melho como funciona o sitema de tempo, pois não consgui entender o pq de 1 0 * * * significar 00:01...

Obrigado
08/02/2003 6:04am (~22 anos atrás)

Novo Comentário:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)