GNU/Linux >> Tutoriels Linux >  >> Linux

Comment redémarrer automatiquement un processus d'arrière-plan Linux en cas d'échec ?

Buildroot a trois systèmes d'initialisation possibles, il y a donc trois façons de procéder :

BusyBox init

Avec cela, on ajoute une entrée à /etc/inittab .

::respawn:/bin/myprocess

Notez que BusyBox init a un /etc/inittab idiosyncratique format. Le deuxième champ n'a pas de sens et le premier champ n'est pas un ID mais un nom de base d'appareil.

Linux "Système V" init

Encore une fois, on ajoute une entrée à /etc/inittab .

myprocess:2345:respawn:/bin/myprocess

systemd

On écrit un fichier unité en, disons, /etc/systemd/system/myprocess.service :

[Unit]
Description=My Process

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

[Install]
WantedBy=multi-user.target

Activez ceci pour démarrer automatiquement au démarrage avec :

systemctl enable myprocess.service

Démarrez-le manuellement avec :

systemctl start myprocess.service

Autres lectures

  • "Système d'initialisation 3.1.3". Le manuel d'utilisation de Buildroot .

Que diriez-vous de créer un sous-shell avec une boucle qui appelle constamment le même processus ?

Si elle se termine, la prochaine itération de la boucle continue et la recommence.

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

Si le sous-shell meurt, c'est fini. La seule possibilité dans ce cas serait de créer un autre processus (je l'appellerai nécromancien) qui vérifie si votre processus est actif, le démarre s'il ne l'est pas et lance ce nécromancien avec cron, afin que vous puissiez le vérifier régulièrement.

La prochaine étape consisterait à se demander ce qui pourrait arriver si cron meurt, mais à un moment donné, vous devriez vous sentir en sécurité et cesser de vous inquiéter.


Le plus simple serait de l'ajouter à /etc/inittab, qui est conçu pour faire ce genre de choses :

réapparaître Si le processus n'existe pas, démarrez le processus. N'attendez pas sa fin (poursuivez l'analyse du fichier /etc/inittab). Redémarrez le processus lorsqu'il meurt. Si le processus existe, ne faites rien et continuez à scanner le fichier /etc/inittab.

Par exemple, vous pourriez faire ceci :

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

Linux
  1. Comment modifier les paramètres de fuseau horaire sous Linux ?

  2. Comment Linux gère-t-il plusieurs séparateurs de chemins consécutifs (/home////nom d'utilisateur///fichier) ?

  3. Comment écrire un script shell à source automatique dans /etc/profile ?

  4. Comment obtenir le chemin d'un processus sous Unix / Linux

  5. Comment redémarrer MySQL

Comment démarrer la commande Linux en arrière-plan et détacher le processus dans le terminal

Comment tuer un processus sous Linux

Comment travailler avec le processus de premier plan et d'arrière-plan sous Linux

Comment redémarrer (ou réinitialiser) un processus en cours d'exécution sous Linux ?

Comment /etc/motd est-il mis à jour ?

Comment envoyer des processus en arrière-plan sous Linux