Armazenando saída do PHP emitida por crontab

0

Eu tenho um arquivo PHP que deve enviar um e-mail por dia agendado por crontab. Aqui está o meu crontab:

45 23 * * * php /var/www/html/linus/class/runnable/dailyStaffReport.php

Percebi que não está funcionando, ou seja, o e-mail não está sendo enviado. Então eu tentei o seguinte:

00 11 * * * php /var/www/html/linus/class/runnable/dailyStaffReport.php 
            >> /var/log/crontab.linus.log 2>&1

Nota: o horário aqui não é importante, estou constantemente mudando para o propósito do teste

Isso não funcionou. O arquivo crontab.linus.log não foi criado.

Ao verificar o arquivo /var/log/cron , notei que meu cron é executado

Feb 25 11:22:01 shoutcast01 CROND[3395]: (apache) CMD (php 
    /var/www/html/linus/class/runnable/dailyStaffReport.php 
    >> /var/log/crontab.linus.log 2>&1)

E, por último, se eu executar manualmente php /var/www/html/linus/class/runnable/dailyStaffReport.php , recebo o email imediatamente na minha caixa de entrada. Eu até escrevi alguns echoes no script PHP na esperança de tentar e ver se em algum lugar ao longo da linha o script falha.

[root@shoutcast01 ~]# php /var/www/html/linus/class/runnable/dailyStaffReport.php
  LOADING STAFF USERS...
  COMPUTING STAFF WORK TIME...
  BUILDING CHART...
  SAVING CHART...
  WRITING DOWN THE CHART...
  SENDING THE EMAIL...
  1
  DONE.

Em um assunto semelhante, tenho outro arquivo que está programado para enviar e-mails a cada 2 minutos e funciona perfeitamente.

[root@shoutcast01 ~]# crontab -u apache -l
22 11 * * * php /var/www/html/linus/class/runnable/dailyStaffReport.php 
      >> /var/log/crontab.linus.log 2>&1
*/2 * * * * php /var/www/html/linus/class/runnable/dispatchEmail.php 

Para resumir

  • O email é entregue se eu executar o script manualmente no terminal.
  • o email não é entregue, mas o log do cron informa que o script foi executado.
  • Não consigo registrar nada com >> /var/log/crontab.linus.log 2>&1

Alguma dica sobre o que posso fazer para tentar resolver esse problema?

    
por Marco Aurélio Deleu 25.02.2016 / 15:29

1 resposta

0

O problema que a depuração não estava funcionando era que eu estava tentando armazenar as informações de depuração em /var/log/crontab.linus.log e esse arquivo não existia e o usuário apache não tinha permissão para criá-lo.

Depois de perceber isso, criei o arquivo sozinho

touch crontab.linus.log
chown apache crontab.linus.log
chgrp apache crontab.linus.log
chmod 0777 crontab.linus.log

Depois, agendei a tarefa novamente e esperei que ela fosse executada. Acontece que o problema original também era sobre permissão.

PHP Fatal error: Uncaught exception 'ImagickException' with message 'Unable to write the file [...]

Portanto, defino chmod 0777 no fólio que o script PHP salva suas imagens. Depois disso, a agenda sendo executada pelo usuário apache foi executada com sucesso e o email foi enviado.

    
por 25.02.2016 / 17:38