Utilizando Crontab/Agenda de Tarefas com o PHP
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:
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:
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:
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
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
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:
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
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
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)
no a httpd.conf tem uma config pra isso
precisa abilitar esta funcao
precisa abilitar esta funcao
20/08/2003 9:56am
(~21 anos atrás)
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
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
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)