2010-04-14 50 views
11

Tengo un script que escucha a un servidor Jabber y responde en consecuencia. Aunque se supone que no se detiene, anoche lo hizo. Ahora quiero ejecutar un trabajo cron cada minuto para verificar si el script se está ejecutando, y comenzarlo si no.Compruebe si un script php todavía se está ejecutando

La pregunta es, ¿cómo puedo comprobar si un script en particular todavía está funcionando?

Algunas soluciones se han publicado here, pero los que son todos para Linux, mientras que yo estoy buscando una solución de Windows. Alguna idea, por favor? Gracias.

Respuesta

4

Una solución rápida y sucia podría ser para la secuencia de comandos para actualizar una fila en una base de datos con una columna fecha fijada para CURRENT_TIMESTAMP. Haga que la segunda secuencia de comandos cron verifique si la marca de tiempo de esta fila es reciente.

+0

puedo usar esa solución como último recurso. ¿Hay algún script de shell de Windows que haga el trabajo? – Nirmal

+0

Los guiones de shell de Windows son menos fáciles de usar que JCL y eso es decir algo, así que me temo que no puedo ayudarlo allí. Podría intentar buscar en PowerShell, ya que esto parece ser útil. – Danten

0

Esto es lo que suele hacer:

  1. crear un directorio de estado, por ejemplo:/datos/estado/
  2. en mi escritura, tiene que comprobar si el archivo de estado es que existe
    1. si existe, exit script
    2. si no existe, continuar el proceso

Sin embargo, hay un problema en esto: ¿Qué pasa si el script muere y no elimina el archivo de estado?

Usted puede agregar un poco de verificación Guardar como esto:

  1. Por cada minuto, archivo de estado de actualización
  2. Para cada inicio de cron, comprobar si el archivo de estado es el último ejemplo actualización: hace 10 o 30 minutos (podemos suponer que nuestra secuencia de comandos cron está muerta) podemos comenzar la secuencia de comandos cron.
0

que tenían el mismo problema y lo resolvió con este código:

file_put_contents("status.txt","ping"); 

lo puse dentro del bucle de mi guión

así, puedo comprobar la última fecha de modificación del archivo a ver si el guión está activo

para no sobrecargar el HD se puede hacer algo como esto:

$i++ 
if($i%100 == 0) 
    file_put_contents("status.txt","ping"); 

Esto escribirá el archivo cuando $ i == 100 o 200 o 300, etc ...

esto es una solución

+0

¿Cómo es esto eficiente que actualizar un campo de marca de tiempo en una base de datos? Creo que actualizar un DB es mejor ya que tiene sus propios mecanismos de bloqueo. Mientras que podemos terminar en un punto muerto si dependemos de un archivo. Por favor, corríjame si estoy equivocado. – Nirmal

+0

He ejecutado muchas secuencias de comandos en mi computadora portátil.Para acceder al mysql desde mi escritorio, debería instalar PHP. Esto se vuelve innecesario cuando trabajo solo con un archivo de texto. Pero, cada caso debe tratarse por separado. – Leo

Cuestiones relacionadas