it-swarm-es.tech

Asegúrese de que un proceso siempre se esté ejecutando

Empecé a alojar sitios hace un tiempo usando Cherokee. Para fuentes externas (FastCGI, etc.) tiene una opción para iniciar el proceso si no puede encontrar uno que se ejecute en el socket o puerto designado. Esto es genial porque significa que si PHP o a Django se cae (como ocurre ocasionalmente) se reinicia automáticamente.

En un nuevo servidor que usa PHP-FPM no pude usar Cherokee (tiene un error con PHP), así que me mudé a NGINX. Realmente me gusta NGINX (por su estilo de configuración) pero estoy teniendo serios problemas con los procesos que se caen y nunca reaparecen. PHP hace esto a veces pero Django son más problemáticos. He creado scripts de inicio para ellos y aparecen en el arranque pero esto no ayúdame si se caen entre reinicios.

Supongo que estoy buscando un proxy FastCGI. Algo que, como Cherokee, sabe qué procesos deben ejecutarse en qué sockets/puertos y los reaparece a pedido. ¿Existe tal cosa? ¿Hay alguna forma de construir esto en NGINX (para facilitar la configuración)?

24
Oli

¿Qué tal daemontools y específicamente la herramienta de supervisión

supervisar supervisa un servicio. Inicia el servicio y lo reinicia si muere. Configurar un nuevo servicio es fácil: todas las necesidades de supervisión son un directorio con un script de ejecución que ejecuta el servicio.

14
Murilo

reaparecer en inittab

8
Stephen Jazdzewski

Secundo la sugerencia daemontools, pero si no le gusta la forma en que funciona el software de DJB (por cualquier razón), también hay supervisord .

Configuré una imagen de FreeBSD hace un tiempo que usaba supervisord para administrar nginx y gunicorn , que solía alojar algunas aplicaciones WSGI simples, y todo el proceso fue bastante sencillo.

Si está haciendo esto para Django, Gunicorn hace que sea realmente sencillo implementar Django aplicaciones, por cierto. Vea esta publicación de blog para más detalles.

5
Hank Gay

Otra opción podría ser usar monit , que es el que generalmente uso.

4
lenin

¿Has considerado god ?

God es un marco de monitoreo fácil de configurar y de extender, escrito en Ruby.

Mantener los procesos y tareas del servidor en ejecución debería ser una parte simple de su proceso de implementación. Dios apunta a ser la aplicación de monitoreo más simple y poderosa disponible.

Lo uso para asegurarme de que si las instancias de Rails/nginx se caen, se reviven, y aunque no veo soporte incorporado para verificar si está usando el puerto correcto o no, pero si el problema es que el proceso falla o ya no se está ejecutando, no puedes equivocarte con god.

2
Chris Bunch

Una solución hacking sería iniciar periódicamente un script (a través de cron) que detecte si el proceso está inactivo y, en este caso, reiniciarlo.

0
Robert Swisher

Además de daemontools y supervisor, hay daemonize .

0
Brian Clapper

Hay varias formas de reiniciar un demonio fallido, la recomendación habitual es "reaparecer en inittab" pero con cierta consideración de un límite si la máquina está realmente atornillada.

El daemon watchdog también puede monitorear un proceso a través de su archivo PID. Sin embargo, eso solo debe considerarse como una línea de defensa secundaria para reiniciar una máquina que está demasiado enferma para funcionar correctamente (por ejemplo, sin memoria, bombardeada, etc.), y no como una forma primaria o para monitorear y reiniciar un demonio.

Finalmente, puede considerar monitorear sistemas complejos usando nagios para proporcionar a los administradores una vista global. Puede ejecutar complementos para sondear el funcionamiento del daemon externamente, que es una prueba más completa de su funcionamiento que simplemente el PID en vivo.

0
Paul Crawford