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