Cómo monitorear un servicio y reiniciar si se detiene en Linux

Cómo monitorear un servicio y reiniciar si se detiene en Linux

En realidad, no estoy tan seguro de si debería usar Shell Scripts o si ya existen algunas formas. Pero sea cual sea el enfoque que utilicemos, me gustaría mantener un Servicio funcionando todo el tiempo.

Digamos apache2como ejemplo. Entonces ..

  • Cuando seael apache2servicio está detenido o no se está ejecutando, quiero que se inicie (o reinicie)... automáticamente.
  • En palabras más simples, quiero mantener unServiciofuncionando todo el tiempo.

(Tal vez podría dar una frecuencia justa para verificar, sihaciendo comprobaciones en tiempo reales el problema. Entonces digamos, cada 5 minutos)

La única forma que se me ocurre es utilizar Shell Scripts con Cron Tab.

  • ¿Existe alguna solución inteligente, por favor?

¡Gracias!

Respuesta1

Actualización marzo 2018

Esta respuesta ahora es bastante antigua y, desde que fue escrita, systemd ha ganado la guerra pid1 en Linux. Por lo tanto, probablemente deberías crear unsistemadunidad, si systemd está integrado en su distribución (que es la mayoría de ellas).

La respuesta a continuación se conserva para la posteridad.


La respuesta monit anterior es válida, pero pensé en mencionar algunas alternativas:

Vale la pena tener en cuenta que su sistema operativo ya ha resuelto el problema de gestión de procesos. Tradicionalmente, Linux ha utilizado sysvinit, que es básicamente la colección de scripts que ves en init.d. Sin embargo, es bastante tonto y no puede monitorear procesos, los scripts init.d son complicados y están siendo reemplazados por una buena razón.

Sistemas operativos más modernos están comenzando a reemplazar a sysvinit, y los pioneros son Upstart y Systemd. Debian se está inclinando hacia systemd, Ubuntu se desarrolló y prácticamente ya hizo la transición a Upstart, y al igual que Debian Redhat/CentOS/Fedora se están moviendo hacia systemd. Por lo tanto, si usa un sistema operativo que ya reemplazó a sysvinit, recomendaría usar el que está integrado. Los scripts son mucho más fáciles de escribir que los scripts de inicio.

He usado runit y me gusta bastante, pero el más fácil de usar es supervisor. También está muy bien documentado, funciona casi en cualquier lugar y está incluido en todas las distribuciones principales.

Pero hagas lo que hagas, por favor, POR FAVOR, no uses un script de shell. ¡Hay tantas cosas malas en ese enfoque!

Respuesta2

iptableses un mal ejemplo ya que en realidad no es un servicio o demonio lo que se está ejecutando, sino parte del kernel. Realmente no puedes "detenerlo" iptables, solo puedes darle una configuración y "detenerlo" implica darle una configuración en blanco. De hecho, he tenido fallas en los sistemas Linux, pero la configuración de reenvío de puertos iptablescontinúa funcionando.

De todos modos, una utilidad llamadamonithará lo que quieras. Si estás usando Debian, está apt-get install monitlejos. Es un poco complicado de aprender pero muy flexible.

Respuesta3

Estamos utilizando este script simple para generar una alerta e iniciar el servicio si no se está ejecutando. También puede agregar más servicios.

 file name: uptime.sh

 #!/bin/bash
 #service monitoring
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^80$ > /dev/null   2>/dev/null
 a=$(echo $?)
 if test $a -ne 0
 then
 echo "http service down" | mail -s "HTTP Service DOWN and restarted now" root@localhost
 /etc/init.d/httpd start > /dev/null 2>/dev/null
 else
 sleep 0
 fi
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^53$ > /dev/null   2>/dev/null
 b=$(echo $?)
 if test $b -ne 0
 then
 echo "named service down" | mail -s "DNS Service DOWN and restarted now" root@localhost
 /etc/init.d/named start > /dev/null 2>/dev/null
 else
 sleep 0
 fi

 Cron setup:
 */5 * * * * /root/uptime.sh > /dev/null 2>/dev/null

Respuesta4

Para agregar a la larga lista de supervisión init/svc, como subdirectorio de S6 hay un nuevo chico en el bloque, 66, que maneja la administración del servicio s6 y el registro de una manera rápida, liviana y fácil de usar. Este es el enlace a la documentación oficial de Obarun-Linux.https://web.obarun.org/software

Estas son preguntas frecuentes sobre cómo utilizar este software 66 y entender el s6.http://sysdfree.wordpress.com/266

Desde su versión estable, solo se encontró un error relacionado con los cambios del kernel desde 4.20-->5.0, todos los demás problemas reportados tuvieron que ver con personas que aprendieron algo nuevo. Si la gestión de servicios tuviera que ser más simple que esto, podría ser mejor cambiar a MS-Windows (Linus no lo permite). Para ver en la vida real cómo funciona esto, sólo hay que descargar un Obarun live.iso y jugar con él. Instale servicios y sus 66 scripts los habilite, elimínelos, vea sus registros, deténgalos e inícielos (mientras están habilitados), agrupe los servicios en un árbol y haga que los árboles de servicios se inicien y detengan todos juntos, tenga servicios a nivel de usuario por separado. del sistema. Hace lo que hace bien el s6 y simplifica para el usuario explotar el sistema a prueba de balas del s6.

Las descargas de imágenes se pueden encontrar aquí:https://web.obarun.org/index.php?id=74 archivos de verificación md5https://repo.obarun.org/iso/

Aparte de la gestión de inicio y servicios, s6/66 no depende de nada más en el sistema. Es una capa del sistema base que deja que el resto del software funcione por sí solo, init/svc-mgmt ciego. Todo s6 y 66 está escrito en C y no es específico de Linux ni de glibc. Los servidores de Skarnet (autores de s6) han estado funcionando durante casi una década sin muchas pausas en un sistema personalizado. Alpine, Void y Adelie actualmente también tienen software s6 en sus repositorios; Adelie lo usa para la supervisión del servicio de forma predeterminada. Void ahora también lleva 66. No sé si alguien ha portado s6 a xxBSD u otros sistemas xxIX, ni en qué medida.

información relacionada