Meu servidor está rodando no Ubuntu e nginx. Meu problema diz respeitoCron, gostaria de iniciá-lo (crontab) usando um arquivo -cron.txt, seu conteúdo:
* * * * * /usr/bin/php /var/www/html/test.php >> /var/log/cron.log
Se eu executá-lo usando um comando: crontab /var/www/html/cron.txt
, funciona perfeitamente, scriptteste.phpestá sendo executado. Mas quando faço o mesmo mas usando um script PHP (executando via navegador): exec('crontab /var/www/html/cron.txt');
, não funciona.
Verificando o cronjob atual pelo comando: crontab -l -u www-data
, a linha do arquivo aparece, mas o Cron não faz seu trabalho. Talvez esteja relacionado a alguns problemas de permissão? Porque só funciona executando como root. Existe uma maneira de forçar o Cron a realizar as tarefas do www-data também?
Responder1
Por favor, use /etc/crontab
. Esse método de execução de tarefas cron permite adicionar um nome de usuário à tarefa. Isso parecerá assim:
* * * * * www-data /usr/bin/php /var/www/html/test.php >> /var/log/cron.log
Você pode fazer nano /etc/crontab
e adicionar a linha ao arquivo.
Mas quando faço o mesmo, mas usando um script PHP (executando via navegador): exec('crontab /var/www/html/cron.txt');, não funciona.
Se isso não funcionar, você provavelmente terá outro problema além do uso do "crontab". Por exemplo: você não precisa redirecionar? (ou seja, usar > /dev/null 2>/dev/null &
no final do seu comando exec?).
Responder2
Consegui o que queria, tudo sobre o código no meu post inicial está ok, a única coisa que eu deveria saber é que o usuário www-data não tem permissão para escrever /var/log
, então não tive saída lá. E além disso, no meu script PHP eu estava tentando criar um arquivo e escrever algo nele, para fazer isso, o caminho absoluto é necessário, então deve ficar assim:
dirname(__FILE__) . '/myfile.txt';
Após essas alterações, tudo funciona conforme o esperado.