1 votos

¿Hay alguna manera de reiniciar un servicio launchd si deja de responder en un puerto?

Tengo un servicio configurado a través de launchd para reiniciarse automáticamente cuando se bloquea. Desafortunadamente, a veces se cuelga y deja de funcionar, sin llegar a bloquearse. Puedo detectar cuando esto sucede porque deja de responder por HTTP en un puerto específico.

¿Cuál es la mejor manera de reiniciar automáticamente el servicio cuando esto sucede?

He pensado en crear un agente launchd separado cuyo único propósito sea hacer un sondeo periódico al puerto HTTP y matar el servicio cuando deja de responder. Pero siento que debe haber una manera mejor de hacerlo, quizás integrada en launchd?

1voto

launchd no puede detectar si un proceso lanzado se queda bloqueado, por lo que tienes que manejarlo tú mismo:

  • Depura/arregla el código para evitar los bloqueos,
  • Rediseña el demonio para detectar la situación por sí mismo (por ejemplo, haciendo que launchd inicie un envoltorio que inicie tanto el demonio real como que verifique periódicamente los bloqueos),
  • Tener un trabajo separado para verificar periódicamente los bloqueos.

1voto

Steve Evans Puntos 155

Latido / Healthcheck

La acción de hacer una llamada a una URL para monitorear un servicio a menudo se conoce como comprobar un latido. Herramientas populares como docker promueven este enfoque de llamadas, consulta la entrada de configuración de healthcheck de docker en healthcheck como ejemplo:

La instrucción HEALTHCHECK le indica a Docker cómo probar un contenedor para verificar que sigue funcionando. Esto puede detectar casos como un servidor web atascado en un bucle infinito e incapaz de manejar nuevas conexiones, incluso cuando el proceso del servidor sigue en ejecución.

Puedes replicar este enfoque con un cronjob y un script shell para reiniciar tu servicio HTTP. Consulta verificación de la página web utilizando curl para una pregunta relacionada.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X