Esse blog mudou para: http://gustavopaes.net/blog/
Criando log das execuções de seu cron
Estou realizando um projeto onde a execução de alguns scripts a cada 5 minutos é fundamental. Caso alguma falha ocorra durante execução, conteúdos podem ser perdidos e, para achar o erro, sem um bom log, fica complicado.
A solução que usei para isso foi criar um arquivo shell — o servidor é linux — que executa o script php e armazena a saída em um arquivo de log.
Dessa forma não preciso, no próprio script php, ficar abrindo arquivos (fopen), escrevendo (fwrite) e me preocupando em fechá-los (fclose) assim que finalizar a execução, até porque é uma execução que pode ser finalizada em vários pontos.
O script shell ficou parecido com isso:
#!/bin/sh
BARRA="-------------------------------------\n";
START="`date +%Y-%m-%d\ %R:%S`";
YEARMONTHDAY="`date +%Y-%m-%d`";
# Configs
PHP_LOCAL="/usr/local/bin/php"
CRON_FILE="/home/usuario/public_html/projeto/cron/cron.php"
LOG_FILE="/home/usuario/public_html/projeto/var/cron_$YEARMONTHDAY.log";
$PHP_LOCAL $CRON_FILE >> $LOG_FILE
O arquivo cron.php contém o script que você deve executar. Lá você deve descrever cada atividade que está sendo realizada, imprimindo na tela com o echo do próprio php. Lembre-se que as quebras de linha devem ser com \n e não o br do HTML.
Agora, ao invés de colocar no cron do seu servidor o cron.php, você coloca esse arquivo.sh que você criou.
Sempre que o script for executado, um arquivo de log será criado com a saída do script executado. Se o arquivo de log para aquele dia já existe, ele irá concatenar as saídas, ou seja, você terá o log de todas as execuções.
Segurança
Para evitar que consigam ver esse seu arquivo e possam usá-lo para alguma ação indesejada, proíba que ele seja exibido. Para isso, crie um arquivo .htaccess, se não existir, com o seguinte conteúdo:
<Files *.sh>
Order Deny,Allow
Deny from all
</Files>
Dicas
Para descobrir onde o php está em seu servidor, no SSH, digite: whereis php.
Já para descobrir qual o path completo até o seu sistema, digite: pwd.