¿Alternativa a Daemontools (djbtools) para supervisar procesos unix?

26

He usado Daemontools para proporcionar una forma simple y confiable de supervisar los servicios de Unix en mis servidores. Funciona bien, pero requiere una forma diferente de pensar ( The DJB Way ) y algunas quejas comunes son:

  • Marcas de tiempo basadas en TAI64N
  • No almacena scripts en /etc/init.d (o (/usr/local)/etc/rc.d)
  • No siempre funciona con scripts como apachectl. Algunas secuencias de comandos deben reescribirse.

Recuerdo que algunos demonios similares de "supervisor / vigilante" estaban en proceso hace unos dos años, pero algunos todavía eran un poco difíciles.

Si ha cambiado de Daemontools a otra cosa, ¿qué eligió y funcionó bien para usted? ¿RedHat o Ubuntu vienen con alguna utilidad de supervisión de procesos por defecto?

Stefan Lasiewski
fuente

Respuestas:

16

Hrm, si estás usando Ubuntu, su nuevo proceso de inicio, advenedizo , incluye un nivel de supervisión del proceso. Se puede usar para el inicio y la detención estándar de los servicios, a los scripts de inicio de SysV, y también puede monitorear las aplicaciones en ejecución y reaparecerlas si mueren.

También puede implementar el reiniciador de procesos de un hombre pobre a través de inittab, dependiendo de cuáles sean sus necesidades.

Si está buscando principalmente algo para vigilar un proceso, para asegurarse de que siempre esté ejecutándose y luego reiniciarlo cuando no lo está, he tenido mucha suerte con el reinicio . Desafortunadamente, la única fuente que conozco es el paquete Debian. Sin embargo, es una aplicación muy pequeña y simple, básicamente solo un archivo .c y .h, con un archivo make. Compilarlo desde el tarball fuente de Debian en Red Hat es trivial (incluso hice un RPM en mi trabajo anterior).

Una última opción de la que he oído hablar, pero no la uso, es Supervisor . Parece una herramienta prometedora, pero reiniciar me ha funcionado lo suficientemente bien en el pasado, por lo que necesitaba, que todavía no me he molestado en jugar con ella.

Christopher Cashell
fuente
12

+1 para runit. Más funciones y flexibilidad que daemontools, compatible con los argumentos y opciones de daemontools existentes. Con buena pinta.

Pero como mencionó, muchas herramientas vienen con sus propios binarios de control, apache2ctl, ejabberdctl, poundctl, collectd, etc. Y aunque existen hacks, a veces es mejor quedarse con las herramientas suministradas, principalmente cuando no está seguro de lo más limpio posible implementación Normalmente hago un compromiso y la mayoría de los servicios se ejecutan bajo la supervisión de runit. Y se puede permitir que los demás corran de manera trivial.

alcy
fuente
1
+1 Vale la pena mencionar que el runsvcomando de runitadmite controles personalizados, por lo que un reinicio podría implementarse en términos de los binarios de control nativos de un demonio.
Pilcrow
4

Bueno, hay runit . No puedo decirte cuáles son sus diferencias y similitudes con Daemontools, pero a juzgar por el sitio web Berstein-esque, diría que existe una influencia definitiva de Bernstein.

Steven Monday
fuente
2
Mi voto es por runit, dado que puede colocarlo en un arreglo SysVInit y hacer que se haga cargo de /etc/init.d/ <scriptname> de manera bastante transparente.
Avery Payne
4

Como alternativa al ya mencionado daemonizey daemontools, existe el comando daemon del paquete libslack.

daemon es bastante configurable y se preocupa por todas las tediosas cosas del demonio, como el reinicio automático, el registro o el manejo de archivos pid.

nazu
fuente
3

También hay una herramienta de demonio de libslack que está escrita en C y disponible para varias plataformas (Unix).

Es bastante configurable y se preocupa por todas las tediosas cosas del demonio, como el reinicio automático, el registro o el manejo de archivos pid.

Chad
fuente
2

Ubuntu viene con Upstart : no sé mucho al respecto, pero sé que tiene capacidades de "supervisor". El lanzamiento de Apple es otra opción (ese artículo de Wikipedia tiene una buena sección de "ver también" que enumera muchos otros, incluidos Upstart y RunIt).

Todos ellos tienen sus puntos buenos y su propia marca especial de übersuck. Siempre que alguien me pregunta sobre los programas de "supervisor de procesos" / "perro guardián", siempre hago la misma pregunta: ¿Por qué necesita uno?

voretaq7
fuente
-2

No hay herramientas populares / de consenso comunitario para esto porque todos los que siguen este camino se dan cuenta de que es un callejón sin salida. Si sus procesos de larga ejecución fallan con demasiada frecuencia para que el monitoreo simple sea lo suficientemente bueno, deje de usarlos y mueva su código dentro de algo que estará más impulsado por eventos.

editar: como Chris señala a continuación, a veces estás completamente acorralado, en cuyo caso un trabajo cron * / 1 que busca el proceso / pidfile, ejecuta un inicio / reinicio si falta, y envía los resultados en un correo electrónico al responsable desarrollador / gerente de producto es su posición alternativa.

cagenut
fuente
3
Es más fácil decirlo que hacerlo. ;-) A veces tiene aplicaciones que se ve obligado a ejecutar, independientemente de cuán inestables o desagradables puedan ser, y cualquier cosa que pueda hacer para mantenerlas en funcionamiento ayudará a reducir las llamadas telefónicas a las 3 a.m. No es ideal, de ninguna manera, pero a veces es tan bueno como parece.
Christopher Cashell
1
Esta respuesta se pierde en dos características de los supervisores de procesador: la capacidad de administrar grupos de procesos como una sola unidad y la capacidad de administrar dependencias. Por ejemplo, su sitio web puede involucrar un servidor web, un servidor de base de datos y varias aplicaciones web que se ejecutan como procesos externos. Estos procesos pueden tener dependencias, por ejemplo, la base de datos debe estar activa antes que la aplicación web. Un buen supervisor de procesos le permitirá iniciar y detener este grupo de procesos con un solo comando, y se asegurará de que las cosas se inicien en el orden correcto.
Larsks
1
En un mundo ideal, todo funcionaría perfectamente. Lamentablemente, este no es un mundo ideal.
Matt
El problema no está fallando con demasiada frecuencia. El problema falla una vez por semana y no se reinicia de inmediato . Esta no es una respuesta real.
dan3
@ChristopherCashell está en el camino correcto. La supervisión dentro de una aplicación generalmente es una ingeniería excesiva (y también resulta que no es la filosofía de UNIX). Se puede suponer que el software siempre es imperfecto, sin importar cuánto esfuerzo proactivo se invierta para solucionar cada bloqueo. La supervisión es una capa externa distinta ... una póliza de seguro. Es mejor que los servicios de producción continúen, pase lo que pase, incluso si "no se supone que colapsen", porque la realidad es que sucede. Prefiero reiniciar el servicio, registrar la excepción y solucionarlo por la mañana. (El aleteo de servicio es otro caso a tener en cuenta)