Ceci est une ancienne révision du document !
Créer un nouveau service avec Systemd
Ce tutoriel décrit la démarche à suivre pour transformer un programme en un service Systemd pouvant être lancé automatiquement au démarrage du système.
Pour notre exemple, nous allons créer un service pour lancer le daemon Deluge au démarrage (deluged
), mais cela peut s'appliquer à n'importe quel programme.
Contexte
Systemd (Wikipedia) remplace System V (Wikipedia) et Upstart en tant que système d'initialisation par défaut dans Ubuntu depuis la version 15.04 Vivid, et depuis la version 8 dans Debian (Jessie).
Pré-requis
- Disposer des droits d'administration
- Savoir utiliser le terminal
Création d'un script d'encapsulation du programme
Deluged ne gère pas les paramètres d'arrêt ou de relance, nous devons donc créer un script qui s'en chargera.
On pourra stocker ce script dans /usr/local/bin
.
sudo cat >/usr/local/bin/deluge.sh
Puis collez le code ci-dessous (<CTRL>+<D> pour finir).
#!/bin/bash # /usr/local/bin/deluge.sh # function d_start() { echo "Deluge : starting service" deluged --pidfile=/tmp/deluge.pid sleep 5 echo "PID is $(cat /tmp/deluge.pid)" } function d_stop() { echo "Deluge : stopping service (PID=$(cat /tmp/deluge.pid))" kill $(cat /tmp/deluge.pid) rm /tmp/deluge.pid } function d_status() { ps -ef | grep deluged | grep -v grep echo "PID file indicate $(cat /tmp/deluge.pid 2>/dev/null)" } # Some things that run always touch /var/lock/deluge # Gestion des instructions du service case "$1" in start) d_start ;; stop) d_stop ;; reload) d_stop sleep 1 d_start ;; status) d_status ;; *) echo "Usage: $0 {start|stop|reload|status}" exit 1 ;; esac exit 0
Création du fichier de service
Dans Systemd , les services sont définis dans des fichiers .service
, situé dans /etc/systemd/system/
.
Créons un fichier de service pour notre programme :
sudo cat >/etc/systemd/system/deluge.service
Puis collez le code ci-dessous (<CTRL>+<D> pour finir).
[Unit] Description=Deluge daemon After=network.target auditd.service [Service] Type=forking ExecStart=/usr/local/bin/deluge.sh start ExecStop=/usr/local/bin/deluge.sh stop ExecReload=/usr/local/bin/deluge.sh reload [Install] WantedBy=multi-user.target
Installation du service
Il faut maintenant recharge la liste des services :
sudo systemctl daemon-reload
Puis activer le lancement du service au démarrage :
sudo systemctl daemon-reload
Principales commandes de gestion des services
Pour mémoire, les commandes suivantes permettent de gérer le service :
sudo systemctl <commande> <service>
(dans notre exemple, <service>
=deluge
)
Commande | Description |
---|---|
start | Démarrer le service |
stop | Arrêter le service |
status | État du service |
is-enabled | Indique si le service est activé au démarrage |
enable | Active le service au démarrage |
disable | Désactive le service au démarrage |
Conclusion
root
, donc si vous aviez déjà configuré le programme avec un autre utilisateur, il faudra :- soit recopier la configuration pour
root
, - soit faire pointer le service vers la bonne configuration (pour
deluged
, il y a une option–config
)
Voilà, il ne reste qu'à terter que tout fonctionne en lançant le service:
sudo systemctl start deluge
Si tout fonctionne on peut redémarrer la machine pour vérifier que le service se lance automatiquement:
sudo reboot
Voir aussi
—- Contributeurs principaux : stepho.