Cómo programar un script PHP recurrente y depurar su funcionamiento

Nota: El siguiente tutorial está probado con PHP5 en distribuciones estándar derivadas de Debian y Ubuntu.

Programar la tarea con cron 

 

En Linux, la forma más sencilla para que un script PHP se ejecute a intervalos regulares, suele ser con el uso de la herramienta cron (al final del artículo tienes varios tutoriales sobre el uso de cron y crontab)

Primero añadimos la tarea al fichero /etc/crontab. Así, si queremos ejecutar el fichero /var/www/test.php cada15 minutos:
sudo nano /etc/crontab
Y al final del fichero añadiremos:
15 * * * * usuario php -f /var/www/test.php
Si una vez pasada la hora programada, queremos comprobar que cron ha ejecutado el script, podemos ojear el log en el que registra los eventos. En él, debería haber una linea con la hora, el nombre "cron" y el nombre del script:
sudo cat /var/log/syslog

Debugging / Depuración del script 

 

Si es tu primer script programado, es posible que cometas errores de rutas relativas y permisos, ya que cron normalmente se ejecuta con un usuario distinto al del servidor web y, además, usará las rutas del sistema de ficheros en vez de las rutas del servidor web. Por tanto, si el script se ejecuta pero no hace lo que debe, querrás depurarlo para encontrar el error.


Depuración básica 

 

Para hacer una depuración a base de “echo” y “var_dump”, basta con modifiar la tarea programada en crontab a:
* * * * * usuario php -f /var/www/test.php >> /tmp/php_debug_log.txt
El motivo de poner cinco asteriscos es para que se ejecute cada minuto (sí, ya sé lo engorroso que es esto)


Depuración de errores 

 

Para ver los errores generados por el motor de PHP, tendremos que modificar el fichero de configuración php.ini para la linea de comandos (CLI). Nota: Este fichero es distinto al php.ini del servidor web
sudo nano /etc/php5/cli/php.ini

Buscamos la variable error_reporting para activar todos los errores y la variable error_log para escribir la ruta del fichero en el que queremos guardar los errores.  Por ejemplo:
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT 
error_log = /tmp/php_error_log.txt

Guardamos el fichero de configuración y comenzamos la depuración. Los cambios se aplican inmediatamente porque es el fichero de configuración para la linea de comandos.

Referencias: tutorial de cron en GeekyTheory, ejemplos de cron en Wikipedia

No hay comentarios:

Publicar un comentario