Evitar ejecuciones múltiples en cron con PHP

Cuando tienes una aplicación web, los procesos cron son muy útiles para automatizar tareas de todo tipo: mantenimiento, background, … El problema que nos podemos encontrar es cuando el tiempo que tarda en ejecutarse un cron supera el tiempo de espera entre ejecuciones, con lo que nos encontramos con dos cron ejecutándose en el mismo momento, pudiendo repercutir negativamente en la propia tarea del cron.

Para evitar esta situación, el script al que hago referencia nos va a venir muy bien, porque añade bloqueos al cron para evitar que dos procesos se ejecuten. Una solución sencilla es crear un fichero, y si el fichero existe, pues no ejecutar el cron. El problema que tiene esto es que si el cron termina abruptamente, el fichero seguirá existiendo por no haberse borrado y el resto de procesos cron no se ejecutarán.

El autor en este script añade la posibilidad de saber si el cron sigue ejecutándose o se terminó incorrectamente, para lo cual en el fichero de bloqueo guarda el PID del proceso cron que lo crea y comprueba si el PID sigue existiendo. Este script sólo es útil en entornos linux.

How to use locks in PHP cron jobs to avoid cron overlaps

Vía / PHPDeveloper.org

Automatic MySQL Backup

Automatic MySQL Backup es un script que nos permite realizar copias de seguridad de MySQL de forma automática. Ofrece las siguientes características:

  • Realizar backups de múltiples bases de datos de MySQL en un único script.
  • Posibilidad de realizar las backups de todas las BDs en un único fichero o separándolo en directorios y ficheros.
  • Compresión de los ficheros en gzip o bzip2.
  • Hacer backups de un servidor MySQL remoto a uno central.
  • Ejecutable mediante cron
  • Envío de emails con los logs a una dirección de email específica diferente de root.
  • Envío por email de la copia de seguridad comprimida.
  • Se puede especificar el tamaño máximo del backup que se enviará por email.
  • Ejecutar comandos antes y después del backup.
  • Elegir el día de la semana para realizar los backups semanales.

Actualización: Samuel nos recomienda un tutorial que realizó, gracias por la aportación.

Automatic MySQL Backup

Vía / HowtoForge