GNU/Linux >> Znalost Linux >  >> Linux

Spusťte bash skript jako démona

Můžete přejít na /etc/init.d/ - uvidíte šablonu démona s názvem skeleton.

Můžete jej duplikovat a poté zadat svůj skript pod funkci start.


Démon je pouze program, který běží jako proces na pozadí, místo aby byl pod přímou kontrolou interaktivního uživatele...

[Níže uvedený bash kód je pro systémy Debian – Ubuntu, distribuce Linux Mint a tak dále]

Jednoduchý způsob:

Nejjednodušší způsob by byl upravit váš soubor /etc/rc.local a pak nechat skript spustit odtud (tj. pokaždé, když spouštíte systém):

sudo nano /etc/rc.local

Přidejte následující a uložte:

#For a BASH script
/bin/sh TheNameOfYourScript.sh > /dev/null &

Lepší způsob, jak to udělat, by bylo vytvořit démona prostřednictvím Upstart:

sudo nano /etc/init/TheNameOfYourDaemon.conf

přidejte následující:

description "My Daemon Job"
author "Your Name"
start on runlevel [2345]    

pre-start script
  echo "[`date`] My Daemon Starting" >> /var/log/TheNameOfYourDaemonJobLog.log
end script

exec /bin/sh TheNameOfYourScript.sh > /dev/null &

Uložte si to.

Potvrďte, že to vypadá dobře:

init-checkconf /etc/init/TheNameOfYourDaemon.conf

Nyní restartujte počítač:

sudo reboot

Nyní, když spouštíte svůj systém, můžete vidět soubor protokolu, který uvádí, že váš démon běží:

cat  /var/log/TheNameOfYourDaemonJobLog.log

• Nyní můžete spustit/zastavit/restartovat/získat stav svého démona pomocí:

restartovat:tato akce se zastaví a poté spustí službu

sudo service TheNameOfYourDaemonrestart restart

start:toto spustí službu, pokud není spuštěna

sudo service TheNameOfYourDaemonstart start

stop:toto zastaví službu, pokud je spuštěna

sudo service TheNameOfYourDaemonstop stop

stav:zobrazí stav služby

sudo service TheNameOfYourDaemonstatus status

Chcete-li jej spustit jako úplného démona ze shellu, budete muset použít setsid a přesměrovat jeho výstup. Výstup můžete přesměrovat do souboru protokolu nebo do /dev/null zahodit to. Za předpokladu, že se váš skript jmenuje myscript.sh, použijte následující příkaz:

setsid myscript.sh >/dev/null 2>&1 < /dev/null &

Tím se proces zcela odpojí od vašeho aktuálního shellu (stdin, stdout a stderr). Pokud chcete zachovat výstup v souboru protokolu, nahraďte první /dev/null s vaším /path/to/logfile.

Výstup musíte přesměrovat, jinak nepoběží jako skutečný démon (čtení a zápis výstupu bude záviset na vašem shellu).


Linux
  1. Jak spustit příkazy bash Linuxu ve skriptu PERL?

  2. Jak zajistit, aby skript Python běžel jako služba nebo démon v Linuxu

  3. Spusťte php skript jako proces démona

  1. Jak opakovaně spouštět bash skript každých N sekund?

  2. Po přihlášení spusťte bash skript

  3. Jak spustit bash skript přes absolutní cestu?

  1. Jak ladit Bash skript?

  2. Skript Init.d není spuštěn při spouštění?

  3. Po spuštění instance EC2 spusťte bash skript