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