Buildroot má tři možné init systémy, takže existují tři způsoby, jak to udělat:
BusyBox init
Tímto se přidá záznam do /etc/inittab
.
::respawn:/bin/myprocess
Všimněte si, že BusyBox init
má idiosynkratický /etc/inittab
formát. Druhé pole nemá žádný význam a první pole není ID ale základní název zařízení.
Linux "System V" init
Opět se přidá záznam do /etc/inittab
.
myprocess:2345:respawn:/bin/myprocess
systemd
Jeden zapíše soubor jednotky, řekněme, /etc/systemd/system/myprocess.service
:
[Unit]
Description=My Process
[Service]
ExecStart=/bin/myprocess
Restart=always
[Install]
WantedBy=multi-user.target
Povolte automatické spuštění při spuštění pomocí:
systemctl enable myprocess.service
Spusťte jej ručně pomocí:
systemctl start myprocess.service
Další čtení
- "3.1.3 init systém". Uživatelská příručka Buildroot .
Co takhle vytvořit subshell se smyčkou, která neustále volá stejný proces?
Pokud skončí, pokračuje další iterace smyčky a začne ji znovu.
(while true; do
/bin/myprocess
done) &
Pokud subshell zemře, je konec. Jedinou možností by v takovém případě bylo vytvořit další proces (budu mu říkat nekromant), který zkontroluje, zda je váš proces živý, spustit jej, pokud ne, a spustit tohoto nekromanta s cronem, abyste to mohli pravidelně kontrolovat.
Dalším krokem by bylo přemýšlet o tom, co by se mohlo stát, kdyby cron zemřel, ale v určitém okamžiku byste se měli cítit v bezpečí a přestat se bát.
Nejjednodušší způsob by bylo přidat jej do /etc/inittab, který je navržený k tomu:
znovu spawn Pokud proces neexistuje, spusťte proces. Nečekejte na jeho ukončení (pokračujte ve skenování souboru /etc/inittab). Restartujte proces, když zemře. Pokud proces existuje, nedělejte nic a pokračujte ve skenování souboru /etc/inittab.
Můžete například udělat toto:
# Run my stuff
myprocess:2345:respawn:/bin/myprocess