Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera...
Estou com um problema que está me incomodando a mais de 1 semana. Preciso agendar a execução de um script a cada 5 minutos. Já li vários tutoriais, artigos, pedi ajuda para amigos... e NADA de funcionar. Não sei se o problema é no script a ser executado (PHP) ou na forma de agendar, ou ainda alguma configuração do servidor.
Vamos às tentativas:
arquivo cron
0-59/5 /path/to/file/file.sh
// tentei também assim
/5 * /path/to/file/file.sh
No arquivo tem um código PHP a ser executado (este foi de teste pra ver se estava OK, mas não funcionou também):
file.sh
#!/usr/share/php
<?php
$file = fopen ( '/path/to/file/teste.txt', 'a' );
fwrite ( $file, time () );
fclose ( $file );
Para criar o agendamento, fiz o seguinte:
$ crontab cron
$ crontab -l // 0-59/5 /path/to/file/file.sh
O arquivo .sh tem permissão de execução. A pasta também tem. Os arquivos e a pasta tem como proprietário o mesmo usuário que está agendando a tarefa.
Alguém pode me dar alguma dica (qualquer ajuda será extremamente bem vinda). Tenho acesso root ao servidor via SSH, caso seja necessário.
Carlos Eduardo
EDIT - fiz uma alteração no código, que eu tinha visto antes. Achei que tinha arrumado, mas não tinha. Ficou assim o código do arquivo .sh
#!/usr/bin/php
<?php
$file = fopen ( '/path/to/file/teste.txt', 'a' );
fwrite ( $file, time () );
fclose ( $file );
Continua não funcionando.
Então... Lendo o que você escreveu fiz algumas modificações e funcionou, mas descobri que o problema era o código que eu estava querendo executar (que estava com problemas - entrava em loop infinito). Aí o código não fazia o que tinha que fazer mas também não mostrava nenhum erro.
Ficou assim:
/5 * /usr/bin/php /var/www/path/to/file.php &> /var/www/path/to/logs.log
O arquivo file.php é um arquivo PHP normal, sem nada de mais. Tudo que depende de caminho dentro do código utiliza caminhos absolutos desde a raiz.
De qualquer forma, valeu pela ajuda e agora está 100% funcionando.
:clap:
Carlos Eduardo
>
arquivo cron
0-59/5 /path/to/file/file.sh
// tentei também assim
/5 * /path/to/file/file.sh
Pode usar .php mesmo. Não que faça diferença na execução, mas só pra identificar que é um PHP, não um shell.
Tente também colocar o path completo do interpretador php:
/5 * /usr/bin/php /path/to/file/file.sh
Confira se o path é esse mesmo.
E use também o path completo pro script: /home/usuario/.../file.sh (ou .php)
Executando com o interpretador, nem precisa da primeira linha, com o path do interpretador dentro do arquivo.
>
No arquivo tem um código PHP a ser executado (este foi de teste pra ver se estava OK, mas não funcionou também):
file.sh
#!/usr/share/php
Aí também vale o path completo: /home/usuario/.../teste.txt
>
Para criar o agendamento, fiz o seguinte:
$ crontab cron
$ crontab -l // 0-59/5 /path/to/file/file.sh
Nunca usei o cron assim. Costumo usar o comando "crontab -e", que já abre o vim pra editar o arquivo com o s agendamentos.
Abraços,
Beraldo
EDIT:
ah, pode usar um log:
/5 * /usr/bin/php /path/to/file/file.sh &> /home/usuario/arquivo.log
mensagens de erro e saídas do script irão pra esse arquivo. aí você pode dar uns prints e ver como anda a execução