Vous pouvez aller à /etc/init.d/ - vous verrez un modèle de démon appelé squelette.
Vous pouvez le dupliquer puis entrer votre script sous la fonction de démarrage.
Un démon est juste un programme qui s'exécute en arrière-plan, plutôt que d'être sous le contrôle direct d'un utilisateur interactif...
[Le code bash ci-dessous est destiné aux systèmes Debian - Ubuntu, distributions Linux Mint, etc.]
Le moyen le plus simple :
Le moyen le plus simple serait de modifier votre fichier /etc/rc.local, puis d'exécuter votre script à partir de là (c'est-à-dire à chaque démarrage du système) :
sudo nano /etc/rc.local
Ajoutez ce qui suit et enregistrez :
#For a BASH script
/bin/sh TheNameOfYourScript.sh > /dev/null &
La meilleure façon de procéder serait de créer un démon via Upstart :
sudo nano /etc/init/TheNameOfYourDaemon.conf
ajoutez ce qui suit :
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 &
Enregistrez ceci.
Confirmez que tout semble correct :
init-checkconf /etc/init/TheNameOfYourDaemon.conf
Redémarrez maintenant la machine :
sudo reboot
Désormais, lorsque vous démarrez votre système, vous pouvez voir le fichier journal indiquant que votre démon est en cours d'exécution :
cat /var/log/TheNameOfYourDaemonJobLog.log
• Vous pouvez maintenant démarrer/arrêter/redémarrer/obtenir l'état de votre démon via :
redémarrer :cela s'arrêtera, puis démarrera un service
sudo service TheNameOfYourDaemonrestart restart
démarrer :cela démarrera un service, s'il n'est pas en cours d'exécution
sudo service TheNameOfYourDaemonstart start
stop :cela arrêtera un service, s'il est en cours d'exécution
sudo service TheNameOfYourDaemonstop stop
statut :ceci affichera le statut d'un service
sudo service TheNameOfYourDaemonstatus status
Pour l'exécuter en tant que démon complet à partir d'un shell, vous devrez utiliser setsid
et rediriger sa sortie. Vous pouvez rediriger la sortie vers un fichier journal ou vers /dev/null
pour le jeter. En supposant que votre script s'appelle myscript.sh, utilisez la commande suivante :
setsid myscript.sh >/dev/null 2>&1 < /dev/null &
Cela détachera complètement le processus de votre shell actuel (stdin, stdout et stderr). Si vous souhaitez conserver la sortie dans un fichier journal, remplacez le premier /dev/null
avec votre /chemin/vers/fichierjournal.
Vous devez rediriger la sortie, sinon elle ne fonctionnera pas comme un vrai démon (cela dépendra de votre shell pour lire et écrire la sortie).