Cómo detectar el apagado de una tarea programada (cronjob) de PHP cuando el servidor se reinicia.
En el marco del desarrollo de una aplicación tipo CMS, utilizo un script periódico con php porque no puedo utilizar crontab, al no ser un administrador del servidor.
Este pseudo-cronjob está funcionando bien. Sin entrar en detalles, se ve así:
public function activateCron()
{
ignore_user_abort(true);
set_time_limit(0);
$time_sleep = 600;
while ($this->IsStopCron() == 1) {
sleep($time_sleep);
exec('php ExecCron.php');
}
}
Sin embargo, el problema es que si el servidor se reinicia, se detiene.
No creo que haya una forma de reiniciarlo automáticamente (además, no me parece una buena idea), pero me gustaría saber si hay alguna manera de detectar cuando el servidor se detiene, por ejemplo, para enviar automáticamente un correo al administrador del servidor solicitando reiniciarlo.
En mis búsquedas en Google encontré register_shutdown_function
, pero no estoy seguro de si eso soluciona mi problema o cómo hacerlo. En cualquier caso, no tuve éxito al intentar usarlo.
Gracias.
davy.ai
Solución para detectar el apagado del servidor con PHP
Si no eres administrador del servidor y no puedes usar crontab para tareas periódicas, entonces puedes usar un script periódico con PHP, como ya has hecho. Sin embargo, si el servidor se reinicia, tu script se detiene, lo cual es un problema.
Una solución es utilizar la función
register_shutdown_function
para detectar cuando el servidor se detiene y realizar alguna acción antes de que el script se detenga.Aquí tienes un ejemplo de cómo puedes usar
register_shutdown_function
en tu código existente:Este código registra una función de apagado llamada
shutdown
, que se llamará cuando el script se detenga por cualquier motivo, incluido un apagado del servidor.La función
connection_status()
devuelve el estado de la conexión actual y si devuelveCONNECTION_TIMEOUT
, significa que el script se detuvo debido a un apagado o reinicio del servidor.Puedes reemplazar la función
mail
con cualquier otro código que desees usar para realizar una acción cuando el servidor se apaga.¡Espero que esto te sea de ayuda!