Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
creer_un_service_avec_systemd [Le 31/08/2022, 23:59] – Passage de http à https sur les liens externes (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) moths-artcreer_un_service_avec_systemd [Le 27/05/2026, 19:38] (Version actuelle) – mise en forme krodelabestiole
Ligne 1: Ligne 1:
 {{tag>Xenial systemd service}} {{tag>Xenial systemd service}}
----- 
  
 ====== Créer un nouveau service avec systemd ====== ====== 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. 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.
- 
  
 ===== Pré-requis ===== ===== Pré-requis =====
-  * Disposer des [[:sudo|droits d'administration]]+ 
 +  * Disposer des [[:permissions administrateur]]
   * Savoir utiliser le [[:terminal]]   * Savoir utiliser le [[:terminal]]
   * Avoir [[:systemd]] comme gestionnaire de service installé (à partir de [[:Xenial]])   * Avoir [[:systemd]] comme gestionnaire de service installé (à partir de [[:Xenial]])
- 
- 
  
 ===== Principes de base===== ===== Principes de base=====
 +
 Comme [[:Upstart]], [[:systemd]] utilise des fichiers de configuration correspondant aux différents services à manipuler. Il n'est (en général) plus nécessaire de créer des fichiers [[:tutoriel:script_shell|bash]] pour gérer le service, systemd s'occupe de tout (lancement, arrêt, redémarrage, status, gestion des logs, etc)\\ Comme [[:Upstart]], [[:systemd]] utilise des fichiers de configuration correspondant aux différents services à manipuler. Il n'est (en général) plus nécessaire de créer des fichiers [[:tutoriel:script_shell|bash]] pour gérer le service, systemd s'occupe de tout (lancement, arrêt, redémarrage, status, gestion des logs, etc)\\
 Ces fichiers de configuration se trouvent dans **/etc/systemd/system/** et permettent d'indiquer les conditions d'activation ou désactivation d'un service, leur propriétaire, etc. Ces fichiers de configuration se trouvent dans **/etc/systemd/system/** et permettent d'indiquer les conditions d'activation ou désactivation d'un service, leur propriétaire, etc.
Ligne 32: Ligne 31:
 <note help> <note help>
 Il est possible d'utiliser un service au niveau utilisateur, dans ce cas, les fichiers de configuration se trouvent dans **~/.config/systemd/user/** Il est possible d'utiliser un service au niveau utilisateur, dans ce cas, les fichiers de configuration se trouvent dans **~/.config/systemd/user/**
- 
  
 Pour un service utilisateur il faut ajouter aux commandes le paramètre --user : Pour un service utilisateur il faut ajouter aux commandes le paramètre --user :
Ligne 61: Ligne 59:
 systemctl --user edit <nom du service>.service systemctl --user edit <nom du service>.service
 </code> </code>
 +
 +<note important>Attention : pour un service user, il faut remplacer ''WantedBy=multi-user.target'' par ''WantedBy=default.target''.</note>
 +
 +===== Qu'est ce qu'un timer =====
 +
 +Les timers sont des fichiers de programmation qui vont se charger de lancer des services à intervalles réguliers.
 +
 +Quand vous créez un timer, il doit avoir l'extension .timer. Un service .service du même nom doit exister. (le service est souvent un service minimaliste, de type oneshot, permettant de lancer une commande)
 +
 +Les timers remplacent le planificateur de tâches cron sur les systèmes modernes.
  
 ===== Type de services systemd ===== ===== Type de services systemd =====
Ligne 69: Ligne 77:
   * Un service de type **oneshot** est similaire à un service de type **simple**. Cependant, systemd attend que le processus se termine avant de continuer ses traitements. **Ce type de service est typiquement utilisé comme équivalent aux commandes lancées au démarrage via les scripts d'init system V**. Cela permet à systemd de remplacer ce mécanisme. De ce fait, avec systemd des nouveaux services apparaissent, alors qu'ils auraient été simplement des scripts d'init avec SysVinit.   * Un service de type **oneshot** est similaire à un service de type **simple**. Cependant, systemd attend que le processus se termine avant de continuer ses traitements. **Ce type de service est typiquement utilisé comme équivalent aux commandes lancées au démarrage via les scripts d'init system V**. Cela permet à systemd de remplacer ce mécanisme. De ce fait, avec systemd des nouveaux services apparaissent, alors qu'ils auraient été simplement des scripts d'init avec SysVinit.
   * Un service de type **dbus** est similaire à un service de type **simple**. Cependant, le processus du service doit obtenir un nom via D-Bus. systemd pourra alors traiter les autres unités.   * Un service de type **dbus** est similaire à un service de type **simple**. Cependant, le processus du service doit obtenir un nom via D-Bus. systemd pourra alors traiter les autres unités.
-  * Un service de type **notify** est similaire à un service de type **simple**. Cependant, c'est le processus du service qui avertira systemd (via la fonction sd_notfy(3)) qu'il peut traiter les autres unités.+  * Un service de type **notify** est similaire à un service de type **simple**. Cependant, c'est le processus du service qui avertira systemd (via la fonction sd_notify(3)) qu'il peut traiter les autres unités.
  
 ===== Exemples de services et leur fichier de configuration===== ===== Exemples de services et leur fichier de configuration=====
Ligne 82: Ligne 90:
 RemainAfterExit=yes RemainAfterExit=yes
 ExecStart=/usr/libexec/iptables.init start ExecStart=/usr/libexec/iptables.init start
-ExecStop=/usr/libexec/iptables.init stop +ExecStop=/usr/libexec/iptables.init stop
 </file> </file>
  
Ligne 117: Ligne 125:
 [Install] [Install]
 WantedBy=multi-user.target WantedBy=multi-user.target
-</file> +</file>
  
   * ''Description'' permet de donner une description du service qui apparaîtra lors de l'utilisation de la commande ''systemctl status <nom_du_service>''   * ''Description'' permet de donner une description du service qui apparaîtra lors de l'utilisation de la commande ''systemctl status <nom_du_service>''
Ligne 155: Ligne 163:
 systemctl enable syncthing@Milou.service systemctl enable syncthing@Milou.service
 </code> </code>
-**Qu'est ce qu'un timer-- 
  
-Les timers sont des fichiers de programmation qui vont se charger de lancer des services à intervalles réguliers. +==== Exemple de service cyclique ====
- +
-Quand vous créez un timer, il doit avoir l'extension .timer. Un service .service du même nom doit exister. (le service est souvent un service minimaliste, de type oneshot, permettant de lancer une commande)+
  
-Les timers «pourraient presque» remplacer le planificateur de tâches cron.+=== Service systeme ===
  
-==== Exemple de service cyclique. ==== +Création du fichier de timer
-Création du fichier de timer        +
 <file sh /etc/systemd/system/MAJ0.timer> <file sh /etc/systemd/system/MAJ0.timer>
 [Unit] [Unit]
 Description=Lance une mise à jour de l'ordinateur quinze minutes après le démarrage de la machine et  itère toutes les trente minutes. Description=Lance une mise à jour de l'ordinateur quinze minutes après le démarrage de la machine et  itère toutes les trente minutes.
 [Timer] [Timer]
-OnBootSec=15minutes   +OnBootSec=15minutes
 # le service démarrera 15 minutes après le démarrage de la machine # le service démarrera 15 minutes après le démarrage de la machine
-OnUnitActiveSec=30minutes  +OnUnitActiveSec=30minutes
 Persistent=true Persistent=true
 # le service démarrera toutes les trente minutes après la dernière activation du timer # le service démarrera toutes les trente minutes après la dernière activation du timer
Ligne 189: Ligne 193:
 </file> </file>
 Avec les commandes de gestion associées Avec les commandes de gestion associées
-<code>sudo systemctl enable MAJ0.timer +<code bash>sudo systemctl enable MAJ0.timer 
 sudo systemctl start  MAJ0.timer sudo systemctl start  MAJ0.timer
 sudo systemctl status MAJ0.timer sudo systemctl status MAJ0.timer
 </code> </code>
 +=== Service utilisateur ===
 +Création et activation du service
 +<code bash>cat <<"EOF" >$HOME/.config/systemd/user/Alerte.service
 +[Unit]
 +Description=Rappeler que le moment est venu.
 +[Service]
 +Type=simple
 +ExecStart=zenity --warning --text " C'est l'heure. Monseigneur."
 +EOF
 +sleep 1
 +systemctl --user enable Alerte.service;
 +systemctl --user start  Alerte.service;</code>
 +Création et activation des déclenchements
 +<code bash>cat <<"EOF" >$HOME/.config/systemd/user/Alerte.timer
 +[Unit]
 +Description=indique les moments retenus.
 +[Timer] 
 +OnCalendar=Mon-Sat *-*-* 10:20:30
 +OnCalendar=Sun *-*-* 12:14:16
 +[Install]
 +WantedBy=timers.target
 +EOF
 +sleep 1
 +systemctl --user enable Alerte.timer;
 +systemctl --user start  Alerte.timer;</code>
 +
 +
  
 ====Exemple de service avancé avec la base graphe neo4j==== ====Exemple de service avancé avec la base graphe neo4j====
Ligne 212: Ligne 243:
  
 # Type de l'Unité systemd. # Type de l'Unité systemd.
-#Les différents types d'unités sont : +#Les différents types d'unités sont :
 #    service : pour un service/démon ; #    service : pour un service/démon ;
 #    socket : pour une socket réseau (de tous types : UNIX, Internet, fichier etc.) ; #    socket : pour une socket réseau (de tous types : UNIX, Internet, fichier etc.) ;
Ligne 230: Ligne 261:
 #https://www.freedesktop.org/software/systemd/man/systemd.service.html #https://www.freedesktop.org/software/systemd/man/systemd.service.html
 [Service] [Service]
-#Lance le service dans un processus système indépendant. +#Lance le service dans un processus système indépendant.
 # simple, forking, oneshot, dbus, notify ou idle sont les valeurs possibles de Type=. # simple, forking, oneshot, dbus, notify ou idle sont les valeurs possibles de Type=.
 Type=forking Type=forking
Ligne 279: Ligne 310:
 #Définit des limites logicielles ou matérielles pour le processus exécuté. #Définit des limites logicielles ou matérielles pour le processus exécuté.
 #https://www.freedesktop.org/software/systemd/man/systemd.exec.html# #https://www.freedesktop.org/software/systemd/man/systemd.exec.html#
-# Correspond à ulimit -n 60000. +# Correspond à ulimit -n 60000.
 # C'est le nombre maximum de fichiers pouvant être ouvert simultanément pour les processus fils du service. # C'est le nombre maximum de fichiers pouvant être ouvert simultanément pour les processus fils du service.
 LimitNOFILE=60000 LimitNOFILE=60000
Ligne 298: Ligne 329:
 ===== Ressources ====== ===== Ressources ======
   * [[wpfr>systemd|systemd]] sur Wikipedia en français   * [[wpfr>systemd|systemd]] sur Wikipedia en français
-  * [[https://www.freedesktop.org/wiki/Software/systemd/|Site officiel de systemd]]+  * [[https://systemd.io/|Site officiel de systemd]] 
 +  *  <del>[[https://www.freedesktop.org/wiki/Software/systemd/|Site officiel de systemd]]</del> (obsolete)
   * [[https://doc.fedora-fr.org/wiki/Systemd|Fedora et systemd]] notamment pour la partie [[#Type de service systemd]]   * [[https://doc.fedora-fr.org/wiki/Systemd|Fedora et systemd]] notamment pour la partie [[#Type de service systemd]]
   * [[https://docs.syncthing.net/users/autostart.html#using-systemd|Documentation de Syncthing]] Créer un service systemd pour lancer Syncthing au démarrage (en anglais)   * [[https://docs.syncthing.net/users/autostart.html#using-systemd|Documentation de Syncthing]] Créer un service systemd pour lancer Syncthing au démarrage (en anglais)