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édentes Révision précédente
Prochaine révision
Révision précédente
utilisateurs:zarmu:systemd [Le 27/09/2016, 01:22]
zarmu [Systemd]
utilisateurs:zarmu:systemd [Le 11/09/2022, 13:14] (Version actuelle)
moths-art 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)
Ligne 7: Ligne 7:
  
 <note warning>​À la la lecture de l’introduction,​ il apparaît très clairement que toute modification malencontreuse de l'​architecture des services lancés par Systemd peut avoir des conséquences dramatiques sur le fonctionnement de votre ordinateur. \\ Il faut être très prudent lorsque l'on touche à la configuration de systemd. \\ __Une mauvaise manipulation peut rendre votre système instable__, jusqu'​à le rendre totalement inutilisable.</​note>​ <note warning>​À la la lecture de l’introduction,​ il apparaît très clairement que toute modification malencontreuse de l'​architecture des services lancés par Systemd peut avoir des conséquences dramatiques sur le fonctionnement de votre ordinateur. \\ Il faut être très prudent lorsque l'on touche à la configuration de systemd. \\ __Une mauvaise manipulation peut rendre votre système instable__, jusqu'​à le rendre totalement inutilisable.</​note>​
-<note warning>​Des anciennes versions de Ubuntu propose dans les dépots ​le paquet systemd et il est donc possible de l'​installer en remplacement de Upstart. Néanmoins, cette manipulation est complexe et extremement ​risquée. Pour cette raison, cette procédure ne sera pas decrite ​ici.</​note>​+<note warning>​Des anciennes versions de Ubuntu propose dans les dépôts ​le paquet systemd et il est donc possible de l'​installer en remplacement de Upstart. Néanmoins, cette manipulation est complexe et extrêmement ​risquée. Pour cette raison, cette procédure ne sera pas décrite ​ici.</​note>​
  
 Il a été développé dans le but de mieux appréhender la gestion d'un système multitâches,​ notamment en matière de dépendance entre les différents services lancés au démarrage avec pour objectif principal l'​optimisation des performances système.\\ Son rôle est plus étendu que [[:​Upstart]],​ il gère également le [[:​montage]] des différents [[:​systeme_de_fichiers|systèmes de fichier]] et introduit un nouveau système de log appelé "The Journal"​.\\ Il a été développé dans le but de mieux appréhender la gestion d'un système multitâches,​ notamment en matière de dépendance entre les différents services lancés au démarrage avec pour objectif principal l'​optimisation des performances système.\\ Son rôle est plus étendu que [[:​Upstart]],​ il gère également le [[:​montage]] des différents [[:​systeme_de_fichiers|systèmes de fichier]] et introduit un nouveau système de log appelé "The Journal"​.\\
  
 Il introduit la notion d'​unité. Une unité représente un fichier de configuration. Entre autres, une unité peut être un service (*.service),​ un target (*.target), un montage (*.mount), un socket (*.socket)… \\ Il introduit la notion d'​unité. Une unité représente un fichier de configuration. Entre autres, une unité peut être un service (*.service),​ un target (*.target), un montage (*.mount), un socket (*.socket)… \\
-C'est donc un sujet très vaste et nous allons donc nous concentrer dans ce wiki sur les aspects ​basique ​des [[:​services]],​ des targets et du journal.+C'est donc un sujet très vaste et nous allons donc nous concentrer dans ce wiki sur les aspects ​basiques ​des [[:​services]],​ des targets et du journal.
  
-=====Gestion basique des services===== +=====Les services===== 
-Un [[:​services|service]] ou daemon est un programme qui tourne en arrière plan et s'​active sous certaine condition. Par exemple, le service hddtemp surveille la température de vos disques dur et declanche ​une alerte si elle dépasse un certain seuil.\\+Un [[:​services|service]] ou daemon est un programme qui tourne en arrière plan et s'​active sous certaine condition. Par exemple, le service hddtemp surveille la température de vos disques dur et déclanche ​une alerte si elle dépasse un certain seuil.\\ 
 +====Gestion basique des services====
 L'​outil de gestion des [[:​services]] (et des autres unités d'​ailleurs) dans systemd s'​appelle **systemctl**.\\ L'​outil de gestion des [[:​services]] (et des autres unités d'​ailleurs) dans systemd s'​appelle **systemctl**.\\
 Il est généralement utilisé dans un [[:​terminal]]:​ Il est généralement utilisé dans un [[:​terminal]]:​
 <​code>​systemctl ACTION <​Nom_du_service>​.service</​code>​ <​code>​systemctl ACTION <​Nom_du_service>​.service</​code>​
-Où  +
   * ACTION sera la commande que l'on souhaite appliquer à la dite unité:   * ACTION sera la commande que l'on souhaite appliquer à la dite unité:
       * // start // : démarrer le service       * // start // : démarrer le service
Ligne 28: Ligne 29:
   * <​Nom_du_service>​ est le nom du service visé.   * <​Nom_du_service>​ est le nom du service visé.
    
-Quelle que soit l'​action menée sur un service, au prochain démarrage de la machine celui-ci devrait retrouver le status qui lui a été [[#Modifier l'​exécution d'un service|défini par défaut]]. ​+Quelle que soit l'​action menée sur un service, au prochain démarrage de la machine celui-ci devrait retrouver le status qui lui a été [[#Modifier l'​exécution d'un service|défini par défaut]].
 <​note>​Il n'est pas nécessaire d'​utiliser sudo devant ces commandes. Systemctl vous demandera votre mot de passe root en cas de besoin (presque à chaque fois, donc)</​note>​ <​note>​Il n'est pas nécessaire d'​utiliser sudo devant ces commandes. Systemctl vous demandera votre mot de passe root en cas de besoin (presque à chaque fois, donc)</​note>​
  
Ligne 37: Ligne 38:
 <​code>​systemctl restart lightdm.service</​code>​ relancera le serveur graphique.\\ <​code>​systemctl restart lightdm.service</​code>​ relancera le serveur graphique.\\
  
-<​note>​Afin de conserver une compatibilité avec les anciens [[:​script_sysV|scripts system V]], des liens vers les commandes principales de systemctl sont installés par défaut. Il s'agit de //​start//,//​ stop//,// restart //et //​status//​.\\ +<​note ​tip>Afin de conserver une compatibilité avec les anciens [[:​script_sysV|scripts system V]], des liens vers les commandes principales de systemctl sont installés par défaut. Il s'agit de //​start//,//​ stop//,// restart //et //​status//​.\\ 
-Par exemple **sudo restart lightdm** est équivalent à **systelctl restart lightdm.service**.</​note>​+Par exemple **sudo restart lightdm** est équivalent à **systelctl restart lightdm.service**.\\ 
 +L'​outil **service** est également branché sur systemctl. **service automount restart** est équivalent à **systelctl restart automount.service**</​note>​
  
  
-=====Lister les services démarrés=====+====Lister les services démarrés====
  
 Pour obtenir la liste triée des services accompagnés de leur état, saisissez dans un [[:​terminal]] : Pour obtenir la liste triée des services accompagnés de leur état, saisissez dans un [[:​terminal]] :
Ligne 50: Ligne 52:
 Cela peut-être pratique pour trouver le service qui ralenti votre démarrage. Cela peut-être pratique pour trouver le service qui ralenti votre démarrage.
  
-=====Modifier l'​exécution d'un service====+====Modifier l'​exécution d'un service====
- +
-Comme [[:​Upstart]],​ systemd utilise des fichiers de configuration correspondant aux différents services à manipuler.\\ +
-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. +
-<note important>​Ce dossier étant essentiel au bon fonctionnement de votre système, il est conseillé d'en faire une sauvegarde avant toute modification de fichier.\\ +
-Dans un [[:​terminal]] saisissez:​ +
-<​code>​sudo cp -r /​etc/​systemd/​system /​etc/​systemd/​system.save$(date +%Y%m%d)</​code></​note>​+
  
 Pour desactiver un service, il faut taper : Pour desactiver un service, il faut taper :
Ligne 72: Ligne 68:
 Pour réactiver le service, il faudra faire la manipulation inverse: Pour réactiver le service, il faudra faire la manipulation inverse:
 <​code>​systemctl enable syncthing@toto.service</​code>​ <​code>​systemctl enable syncthing@toto.service</​code>​
 +
 +====Logiciel graphique====
 +
 +Il existe un utilitaire graphique qui se nomme **systemadm** pour gérer systemd.\\
 +[[:​tutoriel:​comment_installer_un_paquet|Installez les paquets]] **[[apt>​systemd-ui|systemd-ui]]**
 +==== Personnaliser un fichier de configuration Systemd====
 +Comme [[:​Upstart]],​ systemd utilise des fichiers de configuration correspondant aux différents services à manipuler.\\
 +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.
 +
 +<note important>​Ce dossier étant essentiel au bon fonctionnement de votre système, il est conseillé d'en faire une sauvegarde avant toute modification de fichier.\\
 +Dans un [[:​terminal]] saisissez:
 +<​code>​sudo cp -r /​etc/​systemd/​system /​etc/​systemd/​system.save$(date +%Y%m%d)</​code></​note>​
 +
 +Systemd defini differents types de services :
 +  *  Un service de type **simple** (type par défaut) lance un processus principal. Dans le cas où ce processus offre une fonctionnalité à d'​autre processus sur le système, ses canaux de communication doivent être installés avant que le processus principal soit démarré. Ce qui est rendu possible par l'​activation des sockets, et autres canaux de communication. Ainsi, systemd peut traiter les autres unités sans se préoccuper de la fin du lancement d'une unité de type "​simple"​.
 +  * Un service de type **forking**,​ lance un processus père qui créera un processus fils dans le cadre de son démarrage. Le processus parent est prévu pour s’arrêter une fois le démarrage complet et que tous les canaux de communication sont mis en place. Le processus fils continue à fonctionner en tant que le processus principal du service. systemd poursuit le traitement des autres unités une fois que le processus père se termine. **Ce type de service correspond aux services UNIX traditionnels.**
 +  * 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 **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.
 +
 +===Exemple de service de type "​oneshot"​===
 +Un exemple est le service iptables. Voici un extrait de son fichier de configuration :
 +
 +<​file>​
 +[Service]
 +Type=oneshot
 +RemainAfterExit=yes
 +ExecStart=/​usr/​libexec/​iptables.init start
 +ExecStop=/​usr/​libexec/​iptables.init stop
 +</​file>​
 +
 +  * ''​ExecStart''​ permet d'​indiquer la commande à exécuter au lancement du service. Ce paramètre est obligatoire pour tout les types de service.
 +  * ''​ExecStop''​ permet d'​indiquer une commande a exécuter pour arrêter le service. Ce paramètre est facultatif.
 +  * ''​RemainAfterExit''​ à la valeur "​yes"​ permet d'​indiquer que quand la commande de lancement (ExecStart) est terminée, le service est considéré comme toujours lancé. Ce paramètre est très utile pour les services de type "​oneshot"​ qui exécutent une commande à leur lancement (ExecStart) sans qu'il y ait un processus spécifique qui reste en exécution.
 +\\
 +  *  A son lancement, la commande /​usr/​libexec/​iptables.init start est exécutée. Cette commande va permettre de charger des modules iptables et les règles iptables que le modules netfilter du noyau linux va prendre en compte.
 +  * A son arrêt, la commande /​usr/​libexec/​iptables.init stop est exécutée. Cette commande va permettre de remettre en place la politique de traitements iptables par défaut et de décharger les modules iptables.
 +  * Le service iptables continuera d'​apparaitre comme actif après la fin de la commande /​usr/​libexec/​iptables.init start et jusqu’à ce qu'il soit explicitement arrêté.
 +
 +===Exemple de service de type "​simple"​===
 +Un exemple est le service deluged qui permet de lancer le service correspondant à la version deamon du client bit-torrent [[:​deluge]].
 +
 +<file txt /​etc/​systemd/​system/​deluged.service>​
 +[Unit]
 +Description=Deluge Bittorrent Client Daemon
 +After=network-online.target
 +
 +[Service]
 +Type=simple
 +
 +User=deluge
 +Group=deluge
 +UMask=007
 +
 +ExecStart=/​usr/​bin/​deluged -d
 +
 +Restart=on-failure
 +
 +# Configures the time to wait before service is stopped forcefully.
 +TimeoutStopSec=300
 +
 +[Install]
 +WantedBy=multi-user.target
 +</​file>​
 +
 +  * ''​Description''​ permet de donner une description du service qui apparaîtra lors de l'​utilisation de la commande ''​systemctl status <​nom_du_service>''​
 +  * ''​After''​ permet d'​indiquer quel pré-requis est nécessaire pour le fonctionnement du service. Ici, on indique qu'il faut attendre que l'​ordinateur ait accès à Internet pour lancer le daemon. FIXME **à vérifier :** Si l'​accès à Internet est perdu, le service est arrêté automatiquement.\\
 +  * ''​Type''​ permet de specifier le type de service
 +  * ''​User'',​ ''​Group''​ et ''​Umask''​ permet d'​identifier qui est le propriaitaire du processus et donc les attributs des fichiers téléchargés. Ici, les fichiers téléchargés seront accessibles en Lecture/​Ecriture à l'​utilisateur ''​Deluge''​ et aux membres du groupe ''​Deluge''​ et invisibles aux autres utilisateurs du système.
 +  * ''​Restart''​ permet de relancer le service automatiquement en cas de plantage.
 +  * ''​WantedBy''​ permet de spécifier dans quel Target doit être actif le service. Ici, en spécifiant ''​multi-user.target'',​ le service est actif dans les Runlevels 2, 3, 4 et 5
 +\\
 +
 +===Exemple de service modèle===
 +Il est possible de creer plusieurs services à partir d'un même modèle. Par exemple, la gestion des consoles est gérée par un seul modèle ''​getty@.service''​ qui est décliné en ''​getty@tty1.service'',​ ''​getty@tty2.service'',​ etc pour chacune des consoles tty de votre machine. On peut aussi imaginer des services où chaque instance correspond à un utilisateur de la machine. Par exemple, on peut lancer le service syncthing@.service pour synchroniser en parallèle avec [[:​syncthing]] les fichiers de Toto, Gerard et Milou :
 +
 +<file txt syncthing@.service>​
 +[Unit]
 +Description=Syncthing - Open Source Continuous File Synchronization for %I
 +Documentation=man:​syncthing(1)
 +After=network.target
 +Wants=syncthing-inotify@.service
 +
 +[Service]
 +User=%i
 +ExecStart=/​usr/​bin/​syncthing -no-browser -no-restart -logflags=0
 +Restart=on-failure
 +SuccessExitStatus=3 4
 +RestartForceExitStatus=3 4
 +UMask=0002
 +
 +[Install]
 +WantedBy=multi-user.target
 +</​file>​
 +
 +  * ''​Wants''​ permet de spécifier une dépendance. Pour connaître les dépendances d'une unité, tapez dans un [[:​terminal]]:​
 +<​code>​systemctl list-dependencies [<​unit>​] </​code>​
 +  * Ici, le ''​User''​ est ''​%i'',​ soit l'​argument qui est passé lors de l'​activation du service. Pour créer toute les instances du service pour Toto, Gerard et Milou, il faudra avoir tapé une fois :
 +<​code>​systemctl enable syncthing@Toto.service
 +systemctl enable syncthing@Gerard.service
 +systemctl enable syncthing@Milou.service
 +</​code>​
 +
  
 ===== Les targets ===== ===== Les targets =====
Ligne 77: Ligne 176:
 Systemd introduit la notion de target au sein de ses unités. Une target permet de regrouper dans un seul paquet plusieurs autres unités et de retrouver la notion de runlevel ([[:​script_sysV|des scripts system V]]).\\ Systemd introduit la notion de target au sein de ses unités. Une target permet de regrouper dans un seul paquet plusieurs autres unités et de retrouver la notion de runlevel ([[:​script_sysV|des scripts system V]]).\\
  
-===Tableau de correspondance ===+====Tableau de correspondance ​====
  
 ^ Runlevel ^ Systemd Target ^ Notes ^ ^ Runlevel ^ Systemd Target ^ Notes ^
- | runlevel0.target,​ poweroff.target | Arrête le système | +^       0 | runlevel0.target,​ poweroff.target | Arrête le système | 
- | runlevel1.target,​ rescue.target | Mode single user | +^ | runlevel1.target,​ rescue.target | Mode single user | 
- | runlevel3.target,​ multi-user.target | Mode multi-utilisateur,​ non graphique | +^ | runlevel3.target,​ multi-user.target | Mode multi-utilisateur,​ non graphique | 
-2, 4 | runlevel2.target,​ runlevel4.target,​ multi-user.target | Mode défini par l'​utilisateur,​ identique au 3 par défaut. | +^ 2, 4 | runlevel2.target,​ runlevel4.target,​ multi-user.target | Mode défini par l'​utilisateur,​ identique au 3 par défaut. | 
- | runlevel5.target,​ graphical.target | Mode graphique multi-utilisateur | +^ | runlevel5.target,​ graphical.target | Mode graphique multi-utilisateur | 
- | runlevel6.target,​ reboot.target | Redémarre | +^ | runlevel6.target,​ reboot.target | Redémarre | 
-emergency | emergency.target | Shell d'​urgence |+^  ​emergency | emergency.target | Shell d'​urgence |
  
-===Gérer l'​état de votre ordinateur ===+====Gérer l'​état de votre ordinateur ​====
 Pour changer de target, on utilise la commande **isolate** de **systemctl**. Par exemple, pour passer en mode multi-utilisateur non graphique, il faut taper dans un [[:​terminal]]:​ Pour changer de target, on utilise la commande **isolate** de **systemctl**. Par exemple, pour passer en mode multi-utilisateur non graphique, il faut taper dans un [[:​terminal]]:​
 <​code>​systemctl isolate multi-user.target</​code>​ <​code>​systemctl isolate multi-user.target</​code>​
Ligne 112: Ligne 211:
 Votre ordinateur démarrera désormais en mode multi-utilisateur sans mode graphique.\\ Votre ordinateur démarrera désormais en mode multi-utilisateur sans mode graphique.\\
  
-===Infos sur les targets ===+====Infos sur les targets ​====
 Pour connaitre la liste des targets configurés sur votre ordinateur, tapez dans un [[:​terminal]] : Pour connaitre la liste des targets configurés sur votre ordinateur, tapez dans un [[:​terminal]] :
 <​code>​systemctl list-unit-files | grep target </​code>​ <​code>​systemctl list-unit-files | grep target </​code>​
Ligne 120: Ligne 219:
  
  
-===== Personnaliser un fichier de configuration Systemd===== 
- 
-FIXME **Cette section reste à ecrire !!!** 
- 
-Pour connaitre les dépendances d'une unité, tapez dans un [[:​terminal]]:​ 
-<​code>​systemctl list-dependencies [<​unit>​] </​code>​ 
  
 ===== Les journaux ===== ===== Les journaux =====
Ligne 144: Ligne 237:
  
 <​code>​journalctl -p err</​code>​ <​code>​journalctl -p err</​code>​
-=====Logiciels graphiques===== 
  
-Il existe ​un utilitaire graphique qui se nomme **systemadm** pour gérer systemd. +Il existe un logiciel graphique nommé **Gnome-logs** pour lire les fichiers de log generés par systemd. 
-Pour l'​installer,​ tapez dans un [[:​terminal]]:​ + [[:tutoriel:​comment_installer_un_paquet|Installez les paquets]] **[[apt>gnome-logs|gnome-logs]]**
-<​code>​ sudo apt-get install systemd-ui</​code>​ +
- +
-Il existe également ​un logiciel graphique nommé **Gnome-logs** pour lire les fichiers de log generés par systemd. +
-Pour l'​installer,​ tapez dans un [[:terminal]]+
-<codesudo apt-get install ​gnome-logs</​code>​ +
- +
 ===== Ressources ====== ===== Ressources ======
-  * [[https://​fr.wikipedia.org/​wiki/​Systemd|systemd]] sur Wikipedia en français+  * [[wpfr> ​https://​fr.wikipedia.org/​wiki/​Systemd|systemd]] sur Wikipedia en français
   * [[http://​casteyde.christian.free.fr/​system/​linux/​guide/​index.html|YAGIL]] Yet Another « Guide d'​installation de Linux » de Christian Casteyde. Pour tout savoir sur le fonctionnement de [[:GNU]] / [[:Linux]].   * [[http://​casteyde.christian.free.fr/​system/​linux/​guide/​index.html|YAGIL]] Yet Another « Guide d'​installation de Linux » de Christian Casteyde. Pour tout savoir sur le fonctionnement de [[:GNU]] / [[:Linux]].
 +  * [[https://​wiki.archlinux.fr/​Systemd]] Systemd sur le wiki de Archlinux
 +  * [[http://​doc.fedora-fr.org/​wiki/​Systemd]] Systemd sur le wiki de Fedora
 +  * [[https://​docs.syncthing.net/​users/​autostart.html#​using-systemd]] Créer un service systemd pour lancer Syncthing au démarrage (en anglais)
 +  * [[http://​dev.deluge-torrent.org/​wiki/​UserGuide/​Service/​systemd]] Créer un service systemd pour lancer Deluge au démarrage (en anglais)
 +
  
 ---- ----
 //​Contributeurs:​ [[:​utilisateurs:​zarmu]],//​ //​Contributeurs:​ [[:​utilisateurs:​zarmu]],//​
  • utilisateurs/zarmu/systemd.1474932155.txt.gz
  • Dernière modification: Le 27/09/2016, 01:22
  • par zarmu