Executando PHP a partir do crontab

1

Estou utilizando o crontab para executar um arquivo PHP da seguinte forma:

0 4 * * * /opt/lampstack/php/bin/php /opt/lampstack/apache2/htdocs/tests/test.php

Tenho certeza de que o arquivo em si está funcionando corretamente, porque se eu executar /opt/lampstack/php/bin/php /opt/lampstack/apache2/htdocs/tests/test.php na linha de comando, obtenho os resultados esperados.

No cron log eu posso ver que está sendo chamado na hora especificada, mas o arquivo php não roda (o código php é apenas uma linha que grava em um arquivo de log). Eu pensei que talvez tenha algo a ver com permissões de usuário, então eu tentei forçá-lo a ser executado como root (colocando root entre a hora e / opt / lamp ...) mas ainda sem sorte.

Alguma palavra de sabedoria?

Kate

    
por Kate 11.03.2014 / 21:14

3 respostas

2

Você poderia tentar especificar o caminho para o arquivo php.ini com a opção -c e também usar a opção -f para indicar o arquivo a ser executado.

0 4 * * * /opt/lampstack/php/bin/php -c /etc/php.ini -f /opt/lampstack/apache2/htdocs/tests/test.php

Você também pode querer ativar display_errors e error_reporting

Mas também concordo com as outras respostas porque parece um problema com permissões para o arquivo de log em si. Se você tem um conjunto global de parâmetros error_log, você pode tentar ressaltar algo com error_log() em seu código.

    
por 12.03.2014 / 23:00
1

Não se esqueça de que, ao executar a partir do Cron, você não obtém um ambiente de login. Quando você executa a partir de uma linha de comando, obtém pelo menos um perfil e talvez outros perfis executados que podem definir o ambiente e outras variáveis.

Você também é executado como root por padrão no Cron e provavelmente precisa ser executado como usuário www ou no entanto o ambiente da web está configurado.

    
por 11.03.2014 / 23:42
0

Parece um problema de permissões.

Qual é o caminho para o arquivo que você está tentando escrever?

Quais são as permissões nesse arquivo e em seu diretório?

Para ajudar você a testar, altere seu script para algo assim:

<?php

$file = '/tmp/logfile.txt';

echo "I'm writing to $file\n";

if (! $fh = fopen($file, 'a')) {
    fwrite(STDERR, "ERROR: cannot write $file");
    exit(1);
}
fwrite($fh, "Stuff to write\n");
fclose($fh);

Execute isso no cron. Ele escreve para STDOUT, assim você receberá um email. Ele também grava no STDERR se houver um problema ao criar o arquivo, o que causará ainda mais emails.

Se esse script for executado e você receber um erro, ele confirmará que o problema é que você não pode gravar no arquivo que está tentando gravar no cron.

Nesse caso, grave em algum outro arquivo que o cron tenha acesso, ou altere as permissões no arquivo para serem gravadas pelo cron.

    
por 03.06.2016 / 01:09