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).