Matias Rezende 50 Denunciar post Postado Julho 18, 2011 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. Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Julho 19, 2011 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 <?php $file = fopen ( '/path/to/file/teste.txt', 'a' ); fwrite ( $file, time () ); fclose ( $file ); 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 Compartilhar este post Link para o post Compartilhar em outros sites
Matias Rezende 50 Denunciar post Postado Julho 19, 2011 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 Compartilhar este post Link para o post Compartilhar em outros sites