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.

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).

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.

Le script présenté ici peut être largement amélioré, notamment dans la gestion des erreurs.
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

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

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

Pour mémoire, les commandes suivantes permettent de gérer le service :

sudo systemctl <commande> <service>

(dans notre exemple, <service>=deluge)

Commande Description
startDémarrer le service
stopArrêter le service
statusÉtat du service
is-enabledIndique si le service est activé au démarrage
enableActive le service au démarrage
disableDésactive le service au démarrage
Attention, les services sont lancé par 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
  • utilisateurs/stepho/creer_un_service_avec_systemd.1452600845.txt.gz
  • Dernière modification: Le 12/01/2016, 13:14
  • par stepho