Ejecutar scripts PHP automáticamente desde el cron con CURL

Frecuentemente se nos presenta la necesidad de tener que programar alguna tarea diaria, semanal, etc., como un envío masivo de email, o unas consultas pesadas a nuestra base de datos; y hacerlo además en las horas de menor actividad de nuestro servidor.

Para muchos de nosotros resulta fácil programar un script con PHP que realice estas tareas, pero en muchos servidores no se permite ejecutar estos scripts directamente desde la línea de comandos.

La solución a este problema consiste en utilizar CURL. Este paquete viene incorporado en la mayoría de las distribuciones Linux.

CURL es una herramienta para transferencia de ficheros con sintaxis URL, que envía la salida por defecto a la pantalla. Podemos hacer la siguiente prueba:

# curl http://www.google.es

También puede reenviar la salida y guardarla en un fichero

# curl http://www.google.es > google.htm

CURL soporta diferentes protocolos: FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE, LDAP y algunos más. Además se instala una librería con un conjunto de funciones que pueden ser usadas desde PHP.

Siguiendo con nuestro caso, podemos ejecutar ahora un script PHP desde la línea de comandos, simplemente escribiendo esto:

# curl http://localhost/miscript.php

Supongamos que vamos a ejecutar un script que envía los email de nuestro boletín de correo llamado boletin.php pero éste se encuentra alojado en una carpeta protegida de nuestro servidor web. En este caso es necesario pasarle a CURL el usuario y contraseña para acceder al directorio protegido.

# curl -u username:password http://localhost/protegido/boletin.php

Para programar en el cron de nuestro servidor esta tarea y que sea ejecutada automáticamente de forma periódica debemos conocer la ruta completa donde esta instalado el curl que habitualmente suele ser en /usr/bin.

A continuación editar el fichero de tareas de cron (por ejemplo con el comando crontab -e), y añadimos esta línea:

30 4 * * * /usr/bin/curl -u username:password  http://localhost/protegido/boletin.php

Esto hará que todos los días a las 4:30 de la madrugada se ejecute el script boletin.php de manera automática. Normalmente las empresas de hosting ofrecen opciones dentro del Panel de Gestión para administrar cómodamente las tareas programadas. Consulte con su proveedor habitual.

Hay que tener en cuenta el timeout de las peticiones HTTP. Si un proceso tarda mucho debido a su complejidad, el servidor Web finaliza la ejecución de la tarea por tiempo excedido. En entornos de producción no es recomendable ampliar el tiempo de ejecución en el servidor web.

El crontab envía generalmente un correo cuando el script produce una salida. Si no se desea esta información, basta redirigir la salida estándar y la de error añadiendo al final de los comandos: 1>/dev/null 2>/dev/null

Más información sobre la programación de tareas en la ayuda (# man crontab).

Etiquetas: , , , ,

Deja un comentario