GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo reiniciar automáticamente un proceso en segundo plano de Linux si falla?

Buildroot tiene tres posibles sistemas de inicio, por lo que hay tres formas de hacerlo:

Cuadro ocupado init

Con esto, se agrega una entrada a /etc/inittab .

::respawn:/bin/myprocess

Tenga en cuenta que BusyBox init tiene un /etc/inittab idiosincrásico formato. El segundo campo no tiene sentido y el primer campo no es un ID sino un nombre base de dispositivo.

Linux "Sistema V" init

Nuevamente, se agrega una entrada a /etc/inittab .

myprocess:2345:respawn:/bin/myprocess

systemd

Uno escribe un archivo de unidad en, digamos, /etc/systemd/system/myprocess.service :

[Unit]
Description=My Process

[Service]
ExecStart=/bin/myprocess
Restart=always

[Install]
WantedBy=multi-user.target

Habilite esto para que se inicie automáticamente en el arranque con:

systemctl enable myprocess.service

Inícielo manualmente con:

systemctl start myprocess.service

Lecturas adicionales

  • "3.1.3 sistema de inicio". El manual de usuario de Buildroot .

¿Qué hay de crear una subcapa con un bucle que llama constantemente al mismo proceso?

Si finaliza, la siguiente iteración del ciclo continúa y comienza de nuevo.

(while true; do 
    /bin/myprocess
done) &

Sin embargo, si la subcapa muere, se acabó. La única posibilidad en ese caso sería crear otro proceso (lo llamaré nigromante) que verifique si su proceso está vivo, inícielo si no lo está y ejecute este nigromante con cron, para que pueda verificarlo regularmente.

El siguiente paso sería preguntarse qué podría pasar si cron muere, pero en algún momento deberías sentirte seguro y dejar de preocuparte.


La forma más fácil sería agregarlo a /etc/inittab, que está diseñado para hacer este tipo de cosas:

reaparecer Si el proceso no existe, inicie el proceso. No espere a que finalice (continúe escaneando el archivo /etc/inittab). Reinicie el proceso cuando muera. Si el proceso existe, no haga nada y continúe escaneando el archivo /etc/inittab.

Por ejemplo, podría hacer esto:

# Run my stuff
myprocess:2345:respawn:/bin/myprocess

Linux
  1. ¿Cómo reiniciar (o restablecer) un proceso en ejecución en Linux?

  2. ¿Cómo se actualiza /etc/motd?

  3. ¿Cómo obtengo la ruta de un proceso en Unix/Linux?

  4. Linux - Cómo enumerar todos los usuarios

  5. ¿Cómo saber desde qué carpeta se está ejecutando un proceso?

Cómo iniciar el comando de Linux en segundo plano y separar el proceso en la terminal

Cómo matar un proceso en Linux

Cómo trabajar con procesos en primer plano y en segundo plano en Linux

Cómo enviar procesos a segundo plano en Linux

En mi archivo /etc/hosts/ en Linux/OSX, ¿cómo hago un subdominio comodín?

Cómo reiniciar automáticamente un servicio en caso de falla en Linux