
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
Lire la suite
Trouver à quel paquet appartient un fichier »
Publié par
sebsauvage -
Dernière mise à jour le 5 novembre 2009 à 19:31 par marlalapocket