Créer un service SystemD en quelques minutes sur Linux !

Créer un service SystemD en quelques minutes sur Linux !

Place à SystemD, le remplaçant de System V init. Cet orchestrateur de processus sous forme de services est utilisé sur quasiment toutes les distributions Linux. Nous allons voir comment créer son propre service SystemD !

Rends-moi un service

Avant de créer son propre service, analysons un service SystemD existant sur sa machine. Dans mon cas, je vais analyser le service du serveur web Apache, mais pouvez le faire pour n'importe quel autre service.
Pour regarder le contenu d'un service, exécuter la commande suivante :

systemctl cat apache2
Voici le retour de la commande
# /lib/systemd/system/apache2.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=https://httpd.apache.org/docs/2.4/

[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
ExecStart=/usr/sbin/apachectl start
ExecStop=/usr/sbin/apachectl stop
ExecReload=/usr/sbin/apachectl graceful
PrivateTmp=true
Restart=on-abort

[Install]
WantedBy=multi-user.target

Analysons son contenu :

  • [Unit] : Bloc contenant les informations de base du service, telles que son nom, sa description et les dépendances liées au service s'il y en a.
  • [Service] : Bloc qui décrit le comportement du service, son type d'exécution (simple, forking, etc.), la commande qui sera exécutée à son lancement etc..
  • [Install] : Spécifie les conditions dans lesquelles le service doit être activé ou désactivé (niveaux d'exécution "runlevels", les dépendances aux autres services actifs etc...)

Un ACE au service 🎾

Maintenant que nous savons à quoi ressemble un service SystemD, nous allons en créer un étape par étape.

1.Le script

Vous l'avez compris, pour qu'un service s’exécute, il lui faut de la matière, un programme.
C'est ce que nous allons créer, avec un petit script Bash qui affiche la date toutes les secondes.

Pour ce faire, il faudra créer un fichier nommé date-service.sh dans le répertoire  /usr/local/bin

#!/bin/bash
while true ; do
    echo "La date est : $(date)"
    sleep 1
done

Et le rendre exécutable avec la commande suivante :

chmod +x /usr/local/bin/date-service.sh

2.La configuration SystemD

Maintenant que nous avons notre programme, la prochaine étape sera de créer la configuration de notre service, comme le fichier que nous avons vu plus haut pour Apache !

Pour ce faire, il va falloir créer un fichier que l'on va nommer echo-date avec .service comme extension de fichier, dans le répertoire /etc/systemd/system comme ceci :

[Unit]
Description=Affiche la date et l'heure chaque seconde.

[Service]
ExecStart=/usr/local/bin/date-service.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target

3.Recharger SystemD

Afin d'appliquer les modifications que nous venons d'effectuer à SystemD, il va falloir recharger le daemon SystemD avec la commande suivante :

systemctl daemon-reload

4.Lancement de notre service

Pour démarrer le service, utilisez la commande suivante :

systemctl start echo-date.service

5.Changement de statut pour SystemD

Affichons maintenant le statut de notre service avec la commande :

systemctl status echo-date.service
Retour :

🎉 Vous avez créé votre premier service ! Vous pouvez voir les derniers logs d'exécution du script affiché.

Pour consulter les logs détaillés du service, il vous faudra lancer la commande suivante :

journalctl -u echo-date.service

6.Au démarrage

Pour que votre service soit lancé au démarrage de votre machine, il faut l'activer. Pour ce faire, lancer la commande suivante :

systemctl enable echo-date.service

Pour le désactiver au démarrage :

systemctl disable echo-date.service

Quelques commandes utiles

Pour vous aider à administrer des services SystemD, voici une liste de commandes qui peuvent vous être utile.

Recharger la configuration d'un service sans le relancer :

systemctl reload <nom du service>

Lister tous les services présents :

systemctl list-units

Lister les dépendances d'un service :

systemctl list-dependencies <nom du service>

Équivalent d'un top pour les services :

systemd-cgtop

Afficher un rapport de sécurité des services :

systemd-analyze security

Il est possible d'entrer encore plus en détail dans SystemD, avec notamment la commande systemd-nspawn qui permet de tester l'exécution de processus sur un conteneur et bien d'autres fonctionnalités.
En espérant que cet article vous aura plu 😉