Saltar al contenido

¿Cómo detectar si un script PHP ya se está ejecutando?

Hola usuario de nuestro sitio, hallamos la solución a tu pregunta, continúa leyendo y la obtendrás aquí.

Solución:

Solo puede usar un archivo de bloqueo. PHP flock() La función proporciona un contenedor simple para Unix flock función, que proporciona bloqueos de aviso en los archivos.

Si no los libera explícitamente, el sistema operativo liberará automáticamente estos bloqueos cuando finalice el proceso que los contiene, incluso si finaliza de manera anormal.

También puede seguir la convención suelta de Unix de hacer que su archivo de bloqueo sea un ‘archivo PID’, es decir, al obtener un bloqueo en el archivo, haga que su script escriba su PID en él. Incluso si nunca lee esto desde su secuencia de comandos, será conveniente para usted si su secuencia de comandos alguna vez se bloquea o se vuelve loca y desea encontrar su PID para eliminarlo manualmente.

Aquí hay una implementación lista para copiar/pegar:

#!/usr/bin/php

Simplemente configure la ruta de su archivo de bloqueo en el lugar que desee y listo.

Si está ejecutando Linux, esto debería funcionar en la parte superior de su secuencia de comandos:

$running = exec("ps aux|grep ". basename(__FILE__) ."|grep -v grep|wc -l");
if($running > 1) 
   exit;

Si necesita que sea absolutamente a prueba de fallas, debe usar semáforos, que se liberan automáticamente cuando php finaliza el manejo de solicitudes específicas.

Un enfoque más simple sería crear un registro de base de datos o un archivo al comienzo de la ejecución y eliminarlo al final. Siempre puede verificar la "edad" de ese registro/archivo, y si tiene más de, digamos, 3 veces la ejecución normal del script, suponga que falla y elimínelo.

No hay una "bala de plata", solo depende de sus necesidades.

Aquí puedes ver las comentarios y valoraciones de los usuarios

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *