Sur Linux, lorsque l’on installe certaines applications qui ne fonctionne pas par défaut en service (daemon).
On peut souhaiter l’installer en tant que service pour la rendre actif au démarrage du système ou à la connexion utilisateur.
Dans ce tutoriel, je vous montre comment ajouter un service au gestionnaire de services systemd disponible sur Debian, Ubuntu, Mint, Fedora et d’autres distributions Linux.
A partir de là, vous pouvez faire en sorte que le service s’exécute au démarrage de Linux et le contrôler à travers son utilitaire systemctl.
Créer le fichier d’unité d’un service systemd
Tout d’abord, vous devez créer un fichier *.service. Par exemple, rtorrent.service, minecraft.service, etc.
Dans Linux, il existe deux emplacement où créer le fichier de service systemd :
- /etc/systemd/system/ – pour que le service s’exécute au démarrage du système
- /etc/systemd/user/ – service qui s’exécute à la connexion de n’importe quel utilisateur
- ~/.config/systemd/user/ – pour que le service s’exécute à la connexion d’un utilisateur spécifique
Le fichier de service systemd comporte trois sections importantes et nécessaires. Il s’agit des sections [Unit], [Service] et [Install]. L’extension du fichier de service systemd est .service et nous utilisons le symbole dièse/cash (#) pour les commentaires d’une seule ligne.
Vous trouverez ci-dessous un exemple de fichier de service systemd. Veuillez noter qu’il ne s’agit PAS d’un véritable fichier de service systemd. Je l’ai modifié pour vous aider à comprendre.
Voici un exemple de service pour rtorrent que je place dans /etc/systemd/system/rtorrent.service :
[Unit] Description=rTorrent system daemon After=network.target [Service] Type=simple User=debian Group=debian Environment=SESSION_DIR=/opt/torrent/session/ ExecStartPre=/bin/rm -f ${SESSION_DIR}/rtorrent.lock ExecStart=/usr/bin/rtorrent -n -o import=/home/debian/.rtorrent.rc Restart=on-failure RestartSec=3 [Install] WantedBy=multi-user.target
Description d’un fichier d’unité de service
La section Unit
La section Unit contient les détails et la description générales du service.
Voici quelques entrées disponibles dans cette section :
- Description : Titre lisible par l’homme du service systemd
- After : Définit la dépendance d’un service. Par exemple, si vous configurez le serveur Web Nginx, vous voulez que le serveur démarre après que le réseau soit en ligne. Cela inclut généralement les cibles ou d’autres services
- Before : Démarrer le service actuel avant le service spécifié. Dans cet exemple, je dis que “je veux que le serveur web Apache démarre avant que le service pour Nextcloud ne soit lancé”. C’est parce que, dans mon cas, le serveur Nextcloud dépend du serveur web Nginx
La section Service
La section Service permet de configurer l’exécution du service.
Il existe des dizaines et dizaines d’options différentes.
Voici les principales options :
- ExecStartPre : S’exécute avant ExecStart. Cela permet de préparer le service
- ExecStart : La commande qui s’exécute lorsque le service démarre
- ExecReload : C’est un champ facultatif. Il spécifie comment un service est redémarré. Pour les services qui effectuent des E/S sur le disque (en particulier l’écriture sur le disque, comme une base de données), il est préférable de les tuer de manière élégante et de les redémarrer. Utilisez ce champ dans le cas où vous souhaitez avoir un mécanisme de redémarrage spécifique
- ExecStartPost : S’exécute après ExecStart
Voici un exemple des entrées Exec du service MySQL.
Vous pouvez spécifier plusieurs fois les entrées Exec.
ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld
ExecStartPre=/bin/sh -c "systemctl unset-environment _WSREP_START_POSITION"
ExecStartPre=/bin/sh -c "[ ! -e /usr/bin/galera_recovery ] && VAR= || \
ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION
ExecStartPost=/bin/sh -c "systemctl unset-environment _WSREP_START_POSITION"
ExecStartPost=/etc/mysql/debian-start
- User et Group sont des champs facultatives afin d’exécuter le service sous un utilisateur et groupe spécifiques.
User=debian Group=debian
- Environnement : Permet de créer une variable d’environnement
Environment=SESSION_DIR=/opt/torrent/session/
- Type : Ceci indique le type de démarrage d’un processus pour un service systemd donné. Les options sont simple, exec, forking, oneshot, dbus, notify et idle. (plus d’informations ici)
Voici les types possibles :
- Type=simple (par défaut) : systemd considère que le service doit être démarré immédiatement. Le processus ne doit pas forker. N’utilisez pas ce type si d’autres services doivent être commandés sur ce service, à moins qu’il ne soit activé par socket
- Type=forking : systemd considère que le service est démarré une fois que le processus a forké et que le parent est sorti. Pour les démons classiques, utilisez ce type sauf si vous savez que ce n’est pas nécessaire. Vous devez également spécifier PIDFile= pour que systemd puisse garder la trace du processus principal
- Type=oneshot : ceci est utile pour les scripts qui effectuent une seule tâche et se terminent ensuite. Vous pouvez également définir RemainAfterExit=yes pour que systemd considère toujours le service comme actif après la sortie du processus. Définir RemainAfterExit=yes est approprié pour les unités qui changent l’état du système (par exemple, monter une partition)
- Type=notify : identique à Type=simple, mais avec la stipulation que le démon enverra un signal à systemd lorsqu’il sera prêt. L’implémentation de référence pour cette notification est fournie par libsystemd-daemon.so.
- Type=dbus : le service est considéré comme prêt lorsque le BusName spécifié apparaît sur le bus système de DBus
- Type=idle : systemd retardera l’exécution du binaire du service jusqu’à ce que tous les travaux soient distribués. A part cela, le comportement est très similaire à Type=simple
- Restart : C’est un autre champ optionnel mais que vous utiliserez très probablement. Il spécifie si un service doit être redémarré – en fonction des circonstances – ou non. Les options disponibles sont non no, on-success, on-failure, on-abnormal, on-watchdog, on-abort et always
- RestartSec : Définit le délai avant de redémarrer le service
Il existe de nombreux autres options, vous les trouverez dans le man : man systemd.service.
La section Install
La section Install, comme son nom l’indique, gère l’installation d’un service/unité systemd. Il est utilisé lorsque vous exécutez les commandes systemctl enable et systemctl disable pour activer ou désactiver un service.
Voici les champs de la section Installer :
- WantedBy : Ce champ est similaire aux champs After et Before, mais la principale différence est qu’il est utilisé pour spécifier les “niveaux d’exécution” équivalents à ceux de systemd. La cible par défaut est le moment où l’initialisation du système est terminée, c’est-à-dire le moment où l’utilisateur est invité à se connecter. La plupart des services destinés aux utilisateurs (comme Apache, cron, GNOME-stuff, etc.) utilisent cette cible
- RequiredBy– Ce champ peut sembler très similaire à WantedBy, mais la principale différence est que ce champ spécifie des dépendances dures. Autrement dit, si une dépendance n’existe pas, ce service échouera
Démarrer le nouveau service et vérifier son fonctionnement
Pour démarrer un service, utilisez la commande systemctl avec l’option start et le nom du service :
systemctl start rtorrent
Si vous avez créer un service de type user, ajoutez l’option –user comme ceci :
systemctl --user start rtorrent.service
Ensuite on utilise l’option status pour vérifier le fonctionnement :
systemctl status rtorrent.service
Enfin si vous rencontrez des erreurs de démarrage du service, vérifiez les journaux à l’aide de la commande journalctl :
journalctl -e -u rtorrent
Comment rendre le service actif au démarrage de Linux
systemctl enable rtorrent.service
Cela va créer le lien symbolique :
Created symlink /etc/systemd/system/multi-user.target.wants/rtorrent.service → /etc/systemd/system/rtorrent.service.
A partir de là, le service est actif au démarrage du système (ou à la connexion de l’utilisateur pour un service utilisateur).
Pour le rendre inactif du démarrage du système, utilisez l’option disable :
systemctl disable rtorrent.service
Liens
- Systemd : Configuration et fonctionnement des services Linux (daemon)
- Comment fonctionnement les services init.d Linux
- Comment créer un service Linux (systemd)
- Systemctl Linux : utilisation et exemples
- Comment démarrer, arrêter, redémarrer un service sur Linux
- Comment utiliser journalctl pour voir les journaux Linux dans systemd
- Quels sont les journaux Linux de /var/log/ et comment les lire
- Cron : planifier l’exécution d’un programme, script sur Linux
L’article Comment créer un service Linux (systemd) est apparu en premier sur malekal.com.
0 Commentaires