GNU/Linux >> Linux Esercitazione >  >> Linux

Esegui lo script bash come demone

Puoi andare su /etc/init.d/ - vedrai un modello di demone chiamato skeleton.

Puoi duplicarlo e quindi inserire il tuo script sotto la funzione start.


Un demone è solo un programma che viene eseguito come processo in background, anziché essere sotto il controllo diretto di un utente interattivo...

[Il codice bash sottostante è per i sistemi Debian - Ubuntu, distribuzioni Linux Mint e così via]

Il modo semplice:

Il modo più semplice sarebbe quello di modificare il tuo file /etc/rc.local e quindi far eseguire il tuo script da lì (cioè ogni volta che avvii il sistema):

sudo nano /etc/rc.local

Aggiungi quanto segue e salva:

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

Il modo migliore per farlo sarebbe creare un demone tramite Upstart:

sudo nano /etc/init/TheNameOfYourDaemon.conf

aggiungere quanto segue:

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 &

Salva questo.

Conferma che sembra ok:

init-checkconf /etc/init/TheNameOfYourDaemon.conf

Ora riavvia la macchina:

sudo reboot

Ora quando avvii il tuo sistema, puoi vedere il file di log che indica che il tuo demone è in esecuzione:

cat  /var/log/TheNameOfYourDaemonJobLog.log

• Ora puoi avviare/arrestare/riavviare/ottenere lo stato del tuo demone tramite:

riavvia:questo si fermerà, quindi avvierà un servizio

sudo service TheNameOfYourDaemonrestart restart

start:avvierà un servizio, se non è in esecuzione

sudo service TheNameOfYourDaemonstart start

stop:interromperà un servizio, se è in esecuzione

sudo service TheNameOfYourDaemonstop stop

stato:questo mostrerà lo stato di un servizio

sudo service TheNameOfYourDaemonstatus status

Per eseguirlo come demone completo da una shell, dovrai usare setsid e reindirizzare il suo output. Puoi reindirizzare l'output a un file di log o a /dev/null per scartarlo. Supponendo che il tuo script si chiami myscript.sh, usa il seguente comando:

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

Questo staccherà completamente il processo dalla shell corrente (stdin, stdout e stderr). Se vuoi conservare l'output in un file di log, sostituisci il primo /dev/null con il tuo /path/to/logfile.

Devi reindirizzare l'output, altrimenti non verrà eseguito come un vero demone (dipenderà dalla tua shell per leggere e scrivere l'output).


Linux
  1. Come eseguire un comando bash Linux in uno script PERL?

  2. Lo script Init.d non viene eseguito all'avvio?

  3. Come far funzionare uno script Python come un servizio o un demone in Linux

  4. Esegui lo script php come processo daemon

  5. Esegui lo script bash dopo il login

Come eseguire uno script Bash {7 metodi}

35 Esempi di script Bash

Come eseguire lo script della shell come servizio SystemD in Linux

demone idmapd

Come eseguire uno script Bash

Script all'avvio?