Skip to main content

Création service systemd

Sur les distributions utilisant systemd, voici comment créer un fichier service, par exemple pour lancer un script au démarrage.

En effet, si on veut qu'un script se lance au démarrage, l'option la plus adapté est de créer un service systemd, plutot que de passer par rc.local, qui est obsolète.

Exemple de structure d'un fichier "service":

[Unit]
Description=
After=
ConditionPathExists=
 
[Service]
Type= 
ExecStartPre=
ExecStart=
ExecStop=
ExecStopPost=
RemainAfterExit=
Restart=
 
[Install]
WantedBy=
 

Ce fichier se décompose en 3 sections:

    Unit → Descriptions service et les prérequis pour son fonctionnement
      Description: Description du service  After: Après quel service il doit se lancer, par exemple après l'activation réseau (network.target) (facultatif) ConditionPathExists: Pour tester si un répertoire ou fichier existe (facultatif) Service → Options pour le lancement du service
        Type: Type de service (simple,oneshoot...) ExecStartPre: commande ou script à lancer avant  (facultatif) ExecStart: Commande à lancer au démarrage du service ExecStop: Commande à lancer lors de l'arret du service (facultatif) ExecStopPost: Commande à lancer après l’arrêt du service (facultatif) RemainAfterExit: Si le service doit être considéré comme toujours actif après la fin de son exécution (ExecStart) Restart: Pour restart le service lors d'un plantage Install → Option pour le déclenchement

        Pour le détail des options supplémentaire, la doc de redhat est assez fournie. 

        Exemple pour lancer un script au lancement du système:

        [Unit]
        Description="nom du service"
        After=network.target
        
        [Service]
        ExecStart=/chemin/du/script
        RemainAfterExit=yes
        
        [Install]
        WantedBy=multi-user.target

        Il faut créer ce fichier dans /etc/systemd/system, et le nom doit être de type "nom_du_service.service".

        Ensuite pour activer ce service au lancement du système:

        systemctl enable mon_service.service

        Liens supplémentaires

        Liens doc pour plus d'exemples et de précisions:

        linuxtricks - systemd : Créer des services, timers (unités)

        Article nextinpact

        Doc redhat