Quiero tener un proceso que se reiniciará si falla. Busqué en Google un poco y descubrí que una solución fácil es usar Daemontools .
No entendí cómo configurarlo.
- ¿Cuál es la forma más fácil de lograr tal funcionalidad?
- ¿Cómo configurarlo?
Quiero tener un proceso que se reiniciará si falla. Busqué en Google un poco y descubrí que una solución fácil es usar Daemontools .
No entendí cómo configurarlo.
Parece que está buscando una funcionalidad ya proporcionada en Ubuntu con Upstart . La respawn
estrofa en la configuración hará exactamente lo que necesita. Recomendaría contra el uso de una forma menos estándar de lidiar con esto.
Sin más detalles sobre el proceso que está tratando de administrar con él, es difícil decir cómo debería ser la configuración. Depende de si se bifurca y se pone en segundo plano, por ejemplo. La documentación de Upstart sobre la respawn
estrofa debería brindarle más información.
Desafortunadamente, todavía no es posible ejecutar trabajos de usuario correctamente: no puede iniciarse para ejecutar trabajos de usuario
Supongamos que queremos mantener la aplicación Calculadora en funcionamiento, incluso cuando se está matando con fuego (señal 9).
Cree un archivo de configuración en /etc/init/calculator.conf
(basado en este artículo ):
#!upstart
description "Calculator"
# Start job via the daemon control script. Replace "gert" with your username.
exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
Comience ejecutando
sudo start calculator
Se abre en su pantalla actual ( :0
) y disfruta de la genialidad al ver que se reinicia después de cerrarlo.
Identifique la identificación del proceso, por ejemplo, haciendo ps aux | grep calculator
:
gert 13695 0.2 0.4 349744 16460 ? Sl 13:38 0:00 /usr/bin/gnome-calculator
Mátalo con fuego.
sudo kill -9 13695
Míralo reaparecer:
gert 16059 4.6 0.4 349736 16448 ? Sl 13:40 0:00 /usr/bin/gnome-calculator
Tenga en cuenta que esto será más elegante con los planes para los planes de Ubuntu 13.04 con el soporte de trabajo de usuario adecuado.
servicename.conf
debe coincidir con el comando para comenzarstart servicename
. Sospecho que has elegido un nombre diferente.Una herramienta extremadamente simple que puede lograr el mismo efecto sin necesidad de configuración es
immortal
: https://immortal.run/Simplemente ejecute el comando así:
immortal <cmd>
Se ejecutará en segundo plano y se reiniciará automáticamente si sale.
immortalctl
: Ver el estado de los trabajos en ejecución. Hay unaname
columna que se imprimirá aquí, puede usarla para referirse al trabajo con otros comandos de control.immortalctl stop <name>
: Deja de supervisar el trabajo con el nombre (no se reiniciará automáticamente, pero el proceso actual continuará ejecutándose)immortalctl -k <name>
: Envía SIGKILL al proceso actual.immortalctl exit <name>
: Detiene la supervisión del trabajo con el nombre de pila y lo elimina de la lista de trabajos.fuente
stdout
y estéstderr
en primer plano?immortalctl -l out.log <cmd> && tail -f out.log
para lograr el mismo efecto.Si no necesita la funcionalidad del proceso daemon / service / background y solo desea hacerlo en la consola, cree un archivo llamado
autorestart.sh
:Luego
./autorestart.sh
se reiniciará automáticamentesome_command
si sale o se bloquea. CTRL-C rompe el ciclo y sale del programa limpiamente.Probado en Ubuntu 18.04.
fuente
Hay una manera sin "Upstart". La palabra clave es "inittab" :-). Aunque ese es un archivo que generalmente no se altera por defecto, se puede usar para lograr el reaparecimiento deseado en las máquinas SYSV.
fuente
ps-watcher es una herramienta que observa qué procesos se están ejecutando y ejecuta una acción en circunstancias definidas. Vamos a instalarlo:
Consulte la parte inferior de Ejecución de HHVM con respaldo a PHP-FPM para obtener más detalles; esto me ha funcionado bien.
fuente
Los procesos de inicio y reaparición son gestionados por "systemd" desde Ubuntu 15.04, una buena introducción se puede encontrar aquí
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal
un ejemplo para comenzar está disponible en
https://www.devdungeon.com/content/creating-systemd-service-files
Este enfoque reemplaza a los anteriores basados en / etc / inittab y upstart.
fuente