GNU/Linux >> Znalost Linux >  >> Linux

Jednoduchý způsob, jak restartovat havarované procesy?

Řešení 1:

Podíval bych se na daemontools (http://cr.yp.to/daemontools.html).

Supervise byl vytvořen přesně pro tento účel – spouštět procesy a sledovat je a v případě jejich ukončení je okamžitě restartovat.

Stále můžete použít monit, pokud potřebujete udělat něco složitějšího než jednoduchou kontrolu „je to stále běží“, a pokud je třeba proces restartovat, udělejte to prostřednictvím supervize.

Řešení 2:

Můžete také použít /etc/inittab restartujte mrtvé procesy pomocí respawn akce.

Viz část inittab na http://aplawrence.com/Unixart/startup.html

Řešení 3:

S Nagios můžete použít skripty obsluhy událostí, pokud je máte k dispozici pro restartování služeb.

Pokud lak vyžaduje ke spuštění oprávnění root (skripty init.d to obvykle dělají), změňte "/etc/init.d/varnish start" na "sudo /etc/init.d/varnish start". Ale to pravděpodobně nebude dostačující, protože pravděpodobně nebudete chtít udělit všem příkazům, které běží monit jako totální sudo nopasswd, všem příkazům a dát sudo skriptu shellu by bylo v podstatě stejně špatné. Takže budete muset zjistit, které příkazy v tomto init skriptu potřebují sudo, dát těmto příkazům sudo oprávnění v souboru /etc/sudoers uživateli monit a nakonec podle toho upravit tento init skript. Nebo možná místo toho všeho může být tento lak spuštěn jako uživatel bez oprávnění root?

Konečně, jsem si jistý, že to víte, ale přesto to řeknu. Evidentně do toho vkládáte hodně úsilí, doufám, že vynakládáte tolik úsilí na to, abyste zjistili, proč lak padá, a skutečně to opravíte (nebo pronásledujete vývojáře, aby zjistili proč) :-)

Aktualizace:
To nemusí být tak čisté, ale snadným způsobem, jak to provést jako root, může být nastavení skriptu, který zkontroluje, zda je proces v pořádku, a pokud ne, spustí ho. Pak stačí spustit tento skript každých pár minut jako úlohu cron.

Řešení 4:

Další skvělá metoda převzatá z StackOverflow:

until myserver; do
    echo "Server 'myserver' crashed with exit code $?.  Respawning.." >&2
    sleep 1
done

Toto by mohlo být přidáno do crontab:

crontab -e

Poté přidejte pravidlo pro spuštění monitorovacího skriptu:

@reboot /usr/local/bin/myservermonitor

Nebo přidán jako skript v /etc/init.d

Podrobné vysvětlení, proč je to dobrý přístup, najdete v odpovědi StackOverflow.


Linux
  1. Procesy v relaci v interaktivním prostředí versus ve skriptu?

  2. Zabránit Sigintu v dosahování dětských procesů?

  3. Bash skript zpracovává omezený počet příkazů paralelně

  1. Nejlepší způsob, jak skriptovat vzdálené příkazy SSH v dávce (Windows)

  2. Skript Node.js se nepodařilo spustit s systemctl

  3. Startovací skript postgresql Systemd

  1. [Linux] :7 věcí, které se naučíte, když začnete psát jednoduchý skript Shell

  2. Spolehlivý způsob, jak uvěznit dětské procesy pomocí `nsenter:`?

  3. „Správný“ způsob, jak otestovat, zda služba běží ve skriptu?