En realidad, no estoy tan seguro de si debería usar Shell Scripts, o si ya hay algunas formas. Pero sea cual sea el enfoque que usemos, me gustaría mantener un Servicio en funcionamiento todo el tiempo.
Digamos iptables
como un ejemplo. Luego ..
- Cada vez que el
iptables
servicio estástopped
o (en otras palabras) no se está ejecutando, quiero que estéstarted
(orestarted
) ... automáticamente cada vez que se detenga (o no se esté ejecutando). - En otras palabras más simples, quiero mantener un Servicio en funcionamiento todo el tiempo.
( Tal vez podría dar una frecuencia regular para verificar, si hacer la verificación en tiempo real es el problema. Así que digamos, cada 5 minutos)
La única forma en que se me ocurre es usar Shell Scripts con Cron Tab.
- ¿Hay alguna solución inteligente por favor?
¡Gracias!
alerts
le indique que algo no funciona.restarted
cuando se detuvo, por cualquier motivo. No hay problema con reiniciar.Respuestas:
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ía crear una unidad systemd , si systemd está integrado en su distribución (que es la mayoría de ellos).
La respuesta a continuación se conserva para la posteridad.
La respuesta 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 usado sysvinit, que es básicamente la colección de scripts que ves en init.d. Sin embargo, es bastante tonto y no puede monitorear los procesos, los scripts init.d son complicados y están siendo reemplazados por una buena razón.
Los 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 ha desarrollado y prácticamente ya ha hecho la transición a Upstart, y al igual que Debian Redhat / CentOS / Fedora se está moviendo hacia systemd. Por lo tanto, si usa un sistema operativo que ya ha reemplazado a sysvinit, recomendaría usar lo que está incorporado. Los guiones son mucho más fáciles de escribir que los guiones de inicio.
He usado runit y me gusta bastante, pero el más fácil de usar es el supervisor. También está muy bien documentado, funciona en casi cualquier lugar y está empaquetado en todas las distribuciones principales.
Pero hagas lo que hagas, por favor, por favor, NO utilices un script de shell. ¡Hay tantas cosas mal con ese enfoque!
fuente
iptables
es un mal ejemplo, ya que no se está ejecutando realmente un servicio o demonio, sino parte del núcleo. Realmente no puede "parar"iptables
, solo puede darle una configuración y "parar" implica darle una configuración en blanco. De hecho, he tenido fallas en los sistemas Linux, pero la configuración de reenvío de puertosiptables
sigue funcionando.De todos modos, una utilidad llamada
monit
hará lo que quieras. Si está utilizando Debian, estáapt-get install monit
lejos. Es un poco complicado de aprender pero muy flexible.fuente
Estamos utilizando este script simple para hacer una alerta e iniciar el servicio si no se está ejecutando. También puede agregar más servicios.
fuente
Solución alternativa para escritorio (KDE):
Podemos ver un servicio con el estado del servidor Applet / Widget ... después de instalarlo, simplemente agregue un comando en el widget para monitorear su servicio
Ejemplo:
systemctl status httpd.service
Versión de KDE 4: https://store.kde.org/content/show.php?content=101336
Versión de KDE 5: https://store.kde.org/p/1190292/
fuente
Sé que han pasado varios años desde que se hizo la pregunta. pero con systemd (principalmente disponible con centos y REHL) puede ejecutar este comando bash con cron para verificar y reiniciar si el servicio está inactivo.
guárdelo en su directorio bin y asígnele el nombre de monitor. Déle el permiso de archivo apropiado. luego ejecútalo como
si desea verificar el servicio de redis y reiniciar / iniciar si es necesario.
Por último, agregue esto a su trabajo cron.
espero que esto ayude
fuente
Para agregar a la larga lista de supervisión init / svc, como un subdirectorio para S6 hay un nuevo chico en el bloque, 66, que maneja la administración y el registro del servicio s6 de una manera rápida, ligera y fácil de usar. Este es el enlace a la documentación oficial de Obarun-Linux https://web.obarun.org/software
Esta es una pregunta frecuente sobre cómo usar este software 66 y dar sentido a s6 http://sysdfree.wordpress.com/266
Desde su lanzamiento estable, solo se encontró un error relacionado con los cambios del kernel desde 4.20 -> 5.0, todos los demás problemas informados tenían que ver con que las personas aprendieran algo nuevo. Si la gestión del servicio tuviera que ser más simple que esto, sería mejor cambiar a ms-windows (Linus no lo permita). Para ver en la vida real cómo puede funcionar esto, solo hay que descargar un Obarun live.iso y jugar con él. Instale los servicios y sus scripts de 66 habilítelos, elimínelos, vea sus registros, deténgalos e inícielos (mientras esté habilitado), agrupe los servicios en un árbol y haga que los árboles de servicio se inicien y detengan todos juntos, tenga servicios de nivel de usuario por separado del sistema Hace lo que s6 hace bien y hace que sea más simple para el usuario explotar el sistema a prueba de balas bajo s6.
Las descargas de imágenes se pueden encontrar aquí: https://web.obarun.org/index.php?id=74 md5 verifique los archivos https://repo.obarun.org/iso/
Además de init y service management s6 / 66 no tiene dependencias de ninguna otra cosa en el sistema. Es una capa del sistema base que deja que el resto del software funcione solo, init / svc-mgmt a ciegas. Todos los s6 y 66 están escritos en C y no son específicos de Linux, ni específicos de Glibc. Los servidores de Skarnet (autores de s6) han estado funcionando durante casi una década sin muchas pausas en el sistema de musl personalizado. Alpine, Void y Adelie actualmente también tienen software s6 en sus repositorios, Adelie lo usa por defecto para la supervisión del servicio. El vacío ahora lleva 66 también. No sé si y hasta qué punto alguien ha portado s6 a xxBSD u otros sistemas xxIX.
fuente