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 11/09/2022, 11:53] – Suppression des espaces en fin de ligne (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 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>
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 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)