Necesito monitorear varios procesos que se ejecutan en mi servidor web. Por alguna razón, el barniz se bloquea actualmente una vez al día o dos. Estoy usando monit para supuestamente reiniciar el barniz automáticamente, pero no funciona. Aquí está mi entrada monit.conf para Varnish.
check process varnish with pidfile /var/run/varnish.pid
start program = "/etc/init.d/varnish start" with timeout 60 seconds
stop program = "/etc/init.d/varnish stop"
if failed host <my server ip> port 80 protocol http
and request "/blank.html" then restart
if 3 restarts within 5 cycles then timeout
group server
El archivo de registro muestra que después de que el barniz deja de ejecutarse, el intento de reinicio luego falla. Luego, finalmente, monit deja de monitorear el barniz.
¿Alguien tiene sugerencias sobre cómo puedo solucionar esto? O mejor aún, ¿puede sugerir otras formas simples de monitorear y reiniciar automáticamente los procesos bloqueados? ¡Gracias!
Respuestas:
Buscaría en daemontools ( http://cr.yp.to/daemontools.html ).
Supervise se creó exactamente para este propósito: iniciar procesos y observarlos, reiniciándolos de inmediato si alguna vez terminan.
Aún puede usar monit si necesita hacer algo más complicado que una simple verificación de "todavía se está ejecutando", y si el proceso necesita reiniciarse, hágalo mediante supervisión.
fuente
También puede usar / etc / inittab para reiniciar procesos muertos utilizando la acción de reaparición .
Consulte la sección inittab en http://aplawrence.com/Unixart/startup.html
fuente
Puede usar scripts de controlador de eventos con Nagios si lo tiene para reiniciar los servicios.
Si el barniz requiere permiso de root para comenzar (los scripts init.d generalmente lo hacen) cambie "/etc/init.d/varnish start" a "sudo /etc/init.d/varnish start". Pero eso probablemente no sea suficiente, ya que probablemente no desee otorgar a monit de usuario los privilegios totales de sudo nopasswd a todos los comandos y dar sudo a un script de shell sería básicamente igual de malo. Por lo tanto, tendrá que averiguar qué comandos en ese script de inicio necesitan sudo, otorgarle privilegios de sudo en el archivo / etc / sudoers al usuario monit y finalmente editar ese script de inicio en consecuencia. ¿O tal vez en lugar de todo este barniz se puede ejecutar como usuario no root?
Finalmente, estoy seguro de que sabes esto, pero lo diré de todos modos. Claramente está poniendo mucho esfuerzo en esto, espero que esté haciendo tanto esfuerzo para descubrir por qué el barniz se está bloqueando y en realidad lo está arreglando (o persiguiendo a los desarrolladores para que descubran por qué) :-)
Actualización:
Esto podría no ser tan limpio, pero una forma fácil de hacerlo como root podría ser configurar un script que verifique si el proceso está bien, y si no lo inicia. Luego solo ejecuta ese script cada dos minutos como un trabajo cron.
fuente
Otro gran método tomado de StackOverflow :
Esto podría agregarse al crontab:
Luego agregue una regla para iniciar su script de monitor:
O agregado como un script en
/etc/init.d
Consulte la respuesta de StackOverflow para obtener una explicación detallada de por qué este es un buen enfoque.
fuente
También estaba buscando la forma más sencilla de manejar este problema. La forma más fácil que podría encontrar es simplemente agregar
Restart=allways
al.service
archivo correspondiente en la/etc/systemd/system/multi-user.target.wants/
última línea de la[service]
etiqueta.Después de eso,
sudo systemctl daemon-reload
sigasudo systemctl restart service.service
para volver a cargar los cambios.Puede probar comprobando si el servicio se está ejecutando:
systemctl status processname
compruebe la marca de tiempo de inicio. Después de esops -ef | grep servicename
, elimine el proceso con la identificación que acaba de encontrarkill 1234
. después de eso,systemctl status processname
vuelva a hacer y verifique si la marca de tiempo de inicio está actualizada.Debería funcionar en:
fuente