Pregunta

¿Cómo debo crear un script para el supervisor de daemontools?

Empecé a usar D.J.Las herramientas daemontools de Bernstein mantienen algunos procesos en ejecución y funcionan bien.Pero ahora necesito monitorear un par de condiciones adicionales en esos procesos y no pude encontrar buena información sobre cómo hacerlo.

Mi escenario es que tengo algunos procesos ejecutándose para una aplicación web (máquinas virtuales Pharo Smalltalk) y responden http, cada uno en su puerto (eso es para el equilibrio de carga).Me gustaría hacer ping de alguna manera para verificar que no solo se estén ejecutando sino que también respondan a las solicitudes http.Si no responden de cierta manera a una solicitud durante más de 30 segundos, deben tratarse como bloqueados y simplemente reiniciarse.

¿Es esto posible incluso con daemontools?Si es así, ¿cómo debo escribir este script y dónde debo colocarlo?¿O dónde está la documentación sobre esto?

¿Fue útil?

Solución

La solución más sencilla es crear otra tarea daemontool con un script que duerma durante 30 segundos y luego pruebe la presencia del servicio (usando wget o curl, por ejemplo).Si el servicio no responde a tiempo, puede reiniciarlo (svc -t yourapp) y/o enviar una notificación.El script de ejecución del nuevo servicio podría verse tan simple como esto:

#!/bin/sh
sleep 30
if ! wget --quiet --timeout=5 --delete-after "http://yourapp.com/" ; then
  svc -t /etc/service/yourapp
fi

También he adquirido una buena experiencia con herramientas como Munín.Nuevamente debe proporcionar un script que proporcione información sobre el estado de su imagen.Si configuras tus imágenes con un servicio REST podrás incluso proporcionar métricas realmente interesantes como sesiones activas, sesiones inactivas, parámetros de gc, consumo de memoria, estadísticas de base de datos, ...Luego, la herramienta dibuja bonitos gráficos a lo largo del tiempo y le permite especificar límites para recibir notificaciones cuando las cosas se comportan mal.

Otros consejos

Para detectar si el servicio responde, puede usar curl (perfecto para HTTP y scripts de línea de comandos/shell)

curl --connect-timeout 10 http://8.8.8.8 
curl: (28) connect() timed out!

y puedes escribir cosas más sofisticadas, como comprobar que la respuesta sea 200 (OK), etc.

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