GNU/Linux >> Znalost Linux >  >> Linux

Jak automaticky restartovat proces na pozadí linuxu, pokud selže?

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

Linux
  1. CentOS / RHEL :Jak obnovit ze smazaného souboru /etc/passwd

  2. Jak získám cestu k procesu v Unixu / Linuxu

  3. Linux - Jak vypsat všechny uživatele

  1. Jak změnit nastavení časového pásma v Linuxu?

  2. Jak restartovat MySQL

  3. Jak nastavit /etc/issues, aby zobrazoval IP adresu pro eth0

  1. Jak restartovat (nebo resetovat) běžící proces v Linuxu?

  2. Jak se aktualizuje /etc/motd?

  3. Jak zjistit, ze které složky běží proces?