Démarrer un programme en tant que service (démon)

Dernière mise à jour le 5 novembre 2009 à 19:31 par marlalapocket
Publié par sebsauvage
Parfois il peut être utile qu'un programme démarre en même temps que l'ordinateur.
Cet article va vous expliquer comment procéder pour utiliser un programme normal en tant que service (démon).


A titre d'exemple, nous allons créer un mini-serveur web qui affiche juste la date et l'heure, et nous allons l'installer sous forme de service.

1. Créons notre serveur web en Python


Copiez le code suivant dans /opt/monserveur/monserveur.py
(/opt est pour les programmes optionnels ; il vous faut les droits root pour effectuer cette opération.)

#!/usr/bin/python
import datetime,BaseHTTPServer

class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type','text/plain')
        self.end_headers()
        self.wfile.write(str(datetime.datetime.now()))
        return

print "En ecoute sur le port 8088..."
server = BaseHTTPServer.HTTPServer(('', 8088), MyHandler)
server.serve_forever()


puis faites: sudo chmod +x /opt/monserveur/monserveur.py
pour permettre l'exécution.

2. Placez un raccourci dans /usr/bin


sudo ln -s /opt/monserveur/monserveur.py /usr/bin/monserveur

Il est nécessaire que le programme soit lancé depuis /usr/bin ou /usr/sbin

3. Test !


Lancez le serveur: monserveur
et dans votre navigateur, tapez: http://localhost:8088/

Vous devriez voir la date et l'heure.

Arrêtez maintenant votre serveur avec CTRL+C.

Nous allons maintenant l'installer en tant que service.

4. Créer le lanceur


Le système est fourni avec un squelette de lanceur.
Faites: sudo cp /etc/init.d/skeleton /etc/init.d/monserveur

5. Customiser le lanceur


Nous allons modifier le lanceur: sudo gedit /etc/init.d/monserveur

5.1 Identifier le service


Repérez les lignes suivantes:
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="Description of the service"
NAME=daemonexecutablename
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS="--options args"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME


Et renseignez ce qui concerne votre service:
  • DESC : description du service.
  • NAME : nom du service créé dans /usr/bin ou /usr/sbin
  • DAEMON: Nous avons placé notre serveur dans /usr/bin à la place de /usr/sbin: on corrige donc: DAEMON=/usr/bin/$NAME
  • DAEMON_ARGS: Notre serveur web ne prend aucune option en ligne de commande, nous mettons donc DAEMON_ARGS=""


Ce qui donne:
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="A simple webserver which gives date and time."
NAME=monserveur
DAEMON=/usr/bin/$NAME
DAEMON_ARGS=""
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

5.2 Options de démarrage



5.2.1 En tâche de fond


Habituellement, un programme qui se met en "démon" rend la main immédiatement après avoir été lancé et se met en tâche de fond.
Si votre programme ne le fait pas (si votre programme ne rend pas la ligne de commande après être lancé), vous devrez ajouter l'option --background (voir ci-dessous)

C'est notre cas avec notre serveur web: on va ajouter --background

5.2 PID


Pour pouvoir arrêter un service, il faut connaître son PID (identifiant du processus).
Si votre programme ne créé pas de fichier .pid (ce qui est généralement le cas), ajoutez l'option --make-pidfile (voir ci-dessous).

C'est notre cas avec notre serveur web: on va ajouter --make-pidfile


Si vous devez utiliser l'option --background ou --make-pidfile, ajoutez-les dans les deux lignes commençant par start-stop-daemon --start...

Ce qui donne dans /etc/init.d/monserveur:
#
# Function that starts the daemon/service
#
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 --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --background --make-pidfile --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.
}

6. Installer le raccourci service


sudo update-rc.d monserveur defaults 99

update-rc.d va installer les raccourcis pour démarrer le service en même temps que l'ordinateur.
monserveur fait référence au raccourcis /etc/init.d/monserveur
defaults utilise les paramètres par défaut, et 99 sert à indiquer que ce service démarrera après tous les autres.

7. démarrer et arrêter le service


Pour démarrer manuellement le service: sudo /etc/init.d/monserveur start
et testez sur http://localhost:8088/

( Vous pouvez voir le PID de votre service dans /var/run/monserveur.pid )

Pour arrêter manuellement le service: sudo /etc/init.d/monserveur stop
(Le fichier .pid devrait avoir disparu.)

8. Tester le démarrage automatique du service


Maintenant, nous allons tester que le service démarre bien automatiquement au démarrage de l'ordinateur:
Redémarrez votre ordinateur et ouvrez http://localhost:8088/ pour vérifier que le serveur est bien démarré.

9. Configurer le démarrage des services


Vous pouvez demander que le service ne démarre pas avec l'ordinateur sans le déinstaller.
Voir cet article: activer desactiver les services au demarrage

10. Supprimer le service


Pour supprimer le service:
sudo /etc/init.d/monserveur stop
sudo update-rc.d -f monserveur remove
sudo rm /etc/init.d/monserveur
sudo rm /usr/bin/monserveur
et supprimez /opt/monserveur et son contenu.

11. Voir aussi


http://www.commentcamarche.net/forum/affich 10578157 lancer demon module python resolu
Meilleures réponses pour « Démarrer un programme en tant que service (démon) » dans :
Désactiver l'exécution de certains programmes au démarrage VoirDésactiver l'exécution de certains programmes au démarrage - Windows 98/Me/2000/XP/Vista Avec msconfig Avec WinPatrol Avec Startuplite Avec CCleaner Remarques Lorsque vous installez des logiciels, certains s'exécutent à chaque...
[Windows] Démarrer/arrêter un service en ligne de commande VoirL'outil netsh (netsh.exe) permet d'automatiser le démarrage ou l'arrêt d'un service grâce à la ligne de commande suivante : Pour démarrer un service : Net start nom_du_service Pour arrêter un service : Net stop nom_du_service Cela nécessite les...
Activer/désactiver les services au démarrage VoirMéthode simple Pour voir la liste des services, aller dans le menu "Système" > "Administration" > "Services". Cochez/décochez les services que vous souhaitez activer/désactiver. Note: Cette fenêtre n'affiche pas tous les services....
Windows 7 - Barre des tâches et menu démarrer VoirLA BARRE DES TACHES ET LE MENU DEMARRER Cet élément clé du Bureau de Windows est situé en bas de l’écran, sur toute sa largeur. C’est l’un des aspects du système qui a le plus évolué entre Windows Vista et Windows 7. Pour commencer, elle est plus...
SOA - Architecture Orientée Service VoirLe système d'information de l'entreprise est généralement constitué d'applications et de données constituant son héritage (en anglais legacy). Avec les fusions de groupe, l'évolution des technologies, cet héritage a tendance à devenir hétérogène et...
Collection CommentÇaMarche.net