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 ejecutándose en el socket o puerto designado. Esto es genial porque significa que si PHP o un sitio de Django se cae (como lo hacen 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 los sitios de Django son más problemáticos. He creado scripts de inicio para ellos y aparecen en el arranque, pero esto no me ayuda si se desconectan entre reinicios.
Supongo que estoy buscando un proxy FastCGI. Algo que, como Cherokee, sabe qué procesos deberían 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)?
/etc/init.d/apachectl
él. A menudo necesita reescribir su propio script de inicio simple para usarexec
. Aunque me encantaría ver algunos ejemplos más usando Daemontoolsreaparecer en inittab
fuente
Respaldo la
daemontools
sugerencia, pero si no te gusta la forma en que funciona el software de DJB (por cualquier razón), también la haysupervisord
.Configuré una imagen de FreeBSD hace un tiempo que solía
supervisord
administrarnginx
ygunicorn
, 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 aplicaciones Django, por cierto. Vea esta publicación de blog para más detalles.
fuente
Otra opción podría ser usar monit , que es el que generalmente uso.
fuente
¿Lo has considerado
god
?Lo uso para asegurarme de que si las instancias de Rails / nginx se caen, se reviven, y aunque no veo soporte integrado 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 te puedes equivocar
god
.fuente
Además de Daemontools y Supervisor, hay Daemonize .
fuente
Una solución pirata sería lanzar periódicamente un script (vía
cron
) que detecte si el proceso está inactivo y, en este caso, reiniciarlo.fuente
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 secundaria de defensa 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.
fuente
Respuesta simple: comience, escriba su pid en algún lugar y cada x veces (segundos, minutos, su apuesta) verifique si el proceso ha finalizado.
Respuesta larga: todo lo anterior son buenos métodos. Pero algo complicado.
También tenga en cuenta que estar vivo y responder a las solicitudes son cosas diferentes.
fuente