Buildroot hat drei mögliche Init-Systeme, also gibt es drei Möglichkeiten, dies zu tun:
BusyBox init
Damit fügt man /etc/inittab
einen Eintrag hinzu .
::respawn:/bin/myprocess
Beachten Sie, dass BusyBox init
hat einen eigenwilligen /etc/inittab
Format. Das zweite Feld ist bedeutungslos und das erste Feld ist keine ID sondern ein Geräte-Basisname.
Linux "System V" init
Auch hier fügt man einen Eintrag zu /etc/inittab
hinzu .
myprocess:2345:respawn:/bin/myprocess
systemd
Man schreibt eine Unit-Datei beispielsweise in /etc/systemd/system/myprocess.service
:
[Unit]
Description=My Process
[Service]
ExecStart=/bin/myprocess
Restart=always
[Install]
WantedBy=multi-user.target
Aktivieren Sie dies, um beim Booten automatisch zu starten mit:
systemctl enable myprocess.service
Starten Sie es manuell mit:
systemctl start myprocess.service
Weiterführende Literatur
- "3.1.3 Init-System". Das Buildroot-Benutzerhandbuch .
Wie wäre es mit dem Erstellen einer Subshell mit einer Schleife, die ständig denselben Prozess aufruft?
Wenn es endet, geht die nächste Iteration der Schleife weiter und beginnt sie erneut.
(while true; do
/bin/myprocess
done) &
Wenn die Unterschale stirbt, ist es jedoch vorbei. Die einzige Möglichkeit in diesem Fall wäre, einen anderen Prozess (ich nenne ihn Nekromant) zu erstellen, der überprüft, ob Ihr Prozess aktiv ist, ihn zu starten, wenn dies nicht der Fall ist, und diesen Nekromanten mit cron auszuführen, damit Sie dies regelmäßig überprüfen können.
Der nächste Schritt wäre, sich zu fragen, was passieren könnte, wenn Cron stirbt, aber irgendwann sollten Sie sich sicher fühlen und aufhören, sich Sorgen zu machen.
Der einfachste Weg wäre, es zu /etc/inittab hinzuzufügen, das für solche Dinge entworfen wurde:
respawnen Wenn der Prozess nicht vorhanden ist, starten Sie den Prozess. Warten Sie nicht auf die Beendigung (scannen Sie die Datei /etc/inittab weiter). Starten Sie den Prozess neu, wenn er stirbt. Wenn der Prozess existiert, tun Sie nichts und scannen Sie die Datei /etc/inittab weiter.
Sie könnten beispielsweise Folgendes tun:
# Run my stuff
myprocess:2345:respawn:/bin/myprocess