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

Similar Posts

5 Comments

  1. Antes de nada, felicidades por el blog.

    Personalmente no recomiendo el uso de comandos desde lenguajes que tienen funciones de sistema y menos si es un ps (y ademas -e:)… estos solo son para los de sistemas! :DD
    Si solo va a funcionar en un unix se puede utilizar un kill -0, …perdón: posix_kill

    Lo q hay q leer!

  2. Cierto, yo tampoco recomiendo usar funciones de sistema, pero en algunos casos es necesario. Aunque este script sólo será necesario para casos excepcionales.

    Sobre lo de sistemas… no creo que sea exclusivo de ellos, y recomiendo a cualquiera que haga aplicaciones web a que aprenda de sistemas, porque si tienes algún problema necesitarás saber de ello.

  3. No, perdón, lo que digo en mi opinión es que es mejor utilizar las funciones de sistema antes de ejecutar comandos del sistema.
    Y estoy contigo que por supuesto que es necesario disponer de conocimientos del s.o, sobretodo si utilizas lenguajes linkados en un sistema en particular.
    Salu2

Comments are closed.