Pregunta

Tengo un sitio web escrito en PHP (CakePHP) donde ciertas tareas de uso intensivo de recursos se manejan mediante un proceso en segundo plano. Esto se hace a través de la cola de mensajes de Beanstalkd. Necesito alguna forma de recuperar el estado de ese proceso en segundo plano para poder monitorearlo con Monit.

El proceso en segundo plano es un Shell de CakePHP (solo un script de CLI de PHP) que se comunica con Beanstalkd. Simplemente hace una reserva () en Benastalkd y espera un nuevo mensaje. Cuando recibe un mensaje, lo procesa. Quiero alguna forma de monitorear este proceso con Monit para que pueda reiniciar el proceso en segundo plano si algo sale mal. .

En lo que he estado pensando hasta ahora es escribir un script PHP CLI que descargue un mensaje en Beanstalkd. El proceso en segundo plano recoge el mensaje y, de alguna manera, comunica su estado interno a la secuencia de comandos de la CLI. ¿Pero cómo? Sockets? ¿Memoria compartida? ¿Algún otro método de IPC?

¿O quizás estoy siendo demasiado complicado aquí y hay una manera mucho más fácil de monitorear este proceso con Monit?

Gracias de antemano!

¿Fue útil?

Solución

Esto es lo que terminé haciendo al final.

El script de CLI se conecta a beanstalkd, crea una nueva cola (tube) y comienza a verlo. Luego deja caer un mensaje de prioridad más alta en la cola que el daemon de fondo está viendo. Ese mensaje contiene el nombre de la nueva cola que el script de CLI está supervisando.

El proceso en segundo plano recibe este mensaje casi de inmediato (porque es la prioridad más alta), genera un mensaje de estado y lo pone en la cola que el script de CLI está viendo. El script de CLI lo recibe y luego cierra la cola.

Cuando la secuencia de comandos CLI no obtiene una respuesta en 30 segundos, se cerrará con un error que indica que el demonio de fondo está (probablemente) bloqueado.

Até todo esto a Monit. Monit ahora puede verificar que el daemon en segundo plano se está ejecutando (a través de la lista de proceso y pidfile) y verificar que aún está procesando mensajes (utilizando la herramienta CLI para probar que responde a las solicitudes de estado)

Otros consejos

Probablemente hay un complemento para Monit o Nagios para conectarse, ejecutar las estadísticas y regresar si hay "demasiados". No hay un "protocolo" escrito para eso, pero t no parece ser muy difícil de modificar uno existente basado en texto (como nntp o smtp) para hacer lo que quieras. Sin embargo, significa escribirlo en C, por su aspecto.

Desde un script CLI-PHP, lo haría a través de uno (o ambos) de dos métodos diferentes.

1 / suelte un mensaje de prioridad (low-ish) en la cola, y asegúrese de que vuelva en unos segundos. Ponerlo en una cola dedicada y asegurarse de que no haya nada allí antes de ponerlo, también sería una buena adición. 2 / realice un 'stats' y vea cuántos están esperando: 'actual-listo para trabajos'.

Para obtener la información de vuelta a un sitio web (de cualquier manera), puede escribir en un archivo o en algo como Memcached que gts leyó y actuó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top