Création d’un daemon linux

By | 25 February 2014

Lancer un programme ou un script au démarrage de la machine de manière automatique, il est nécessaire de passer un daemon ou service. Nous allons voir ici rapidement comment le faire.
Via init.d pour créer un daemon il est nécessaire de copier le modèle de référence et de l'adapter à notre besoin.

Etape 1 : Copier le modèle (Ici il sera question dans l'exemple de lancer le programme perl pixelserv)

cp /etc/init.d/skeleton /etc/init.d/pixelserv

Etape 2 : Editer votre fichier /etc/init.d/pixelserv

nano /etc/init.d/pixelserv

Etape 3 : Modifier notre fichier /etc/init.d/pixelserv

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Service Web Pixelserv" # Description du service
NAME=pixelserv # Nom du script à lancer
DAEMON=/usr/bin/$NAME # Emplacement du script ici /usr/bin
DAEMON_ARGS=""
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

Etape 4 : Rendre le script exécutable :

chmod +x /etc/init.d/pixelserv

Etape 5 : faire un essai

sudo /etc/init.d/pixelserv start

et

sudo /etc/init.d/pixelserv stop

5.1 Si le script au démarrage ne rend pas la main et reste bloqué , il est nécessaire de rajouter une option ( –background ) voir ci dessous :

5.2 Si le service démarre correctement mais la commande stop ne fonctionne pas car il ne créer pas de fichier pid , il est faut rajouter une autre option (–make-pidfile)

do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
start-stop-daemon --start --background --make-pidfile --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
|| return 1
start-stop-daemon --start --background --make-pidfile --quiet --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
}

Etape 6 : inscire le daemon pour démarrer au boot

sudo insserv pixelserv

Ressources :

Leave a Reply

Your email address will not be published. Required fields are marked *