SYSTEMD
P I N G O U I N L I N U X
1
Systemd
• Systemd est la partie de Linux qui est responsable du démarrage des services,
• Le Systemd et Service Manager est utilisé pour démarrer des éléments appelés
unités "Units".
• "Units" peuvent être plusieurs choses. L'un des types d'unités les plus importants est
le service.
2
Systemd
• En règle générale, les services sont des processus qui fournissent des fonctionnalités
spécifiques,
• Tels que le service SSH, le service Web Apache.
• Systemd à l'avantage de fournit une interface uniforme pour démarrer les unités.
3
Emplacement des units Systemd
• Cette interface est définie dans le fichier unité, dans:
/usr/lib/systemd/system contient les fichiers d'unité par défaut qui ont été
installés à partir des packages RPM (ne pas toucher).
/etc/systemd/system contient des fichiers d'unités personnalisés, par
l'administrateur ou par la commande systemctl edit
/run/systemd/system contient des fichiers d'unité qui ont été générés
automatiquement.
• Si un fichier Unit existe en plus emplacement, la priorité est à /run... puis à /etc/...
et enfin /usr/...
4
L'Unit Systemd Service
• Il est utilisé pour démarrer des processus.
• Vous pouvez démarrer n'importe quel type de processus à l'aide d'une unité de
service.
• Exemple: [Link]
5
L'Unit Systemd Service
Tout fichier d'Unit de service Systemd se compose des trois sections suivantes:
• [Unit] Décrit l'Unit et définit les dépendances.
• Cette section contient également l'importante instruction After et éventuellement
l'instruction Before.
• [Service] Décrit comment démarrer et arrêter le service et demander l'état de
l'installation.
• ExecStart, qui indique comment démarrer l'Unit, ou à une ligne ExecStop, qui indique
comment arrêter l'Unit.
6
L'Unit Systemd Service
• [Unit] Le type forking est couramment utilisé par les processus.
• Le type oneshot est utile si vous souhaitez déclencher un workflow mais que vous
devez d'abord effectuer une configuration ou disposer d'une série de tâches
autonomes séquentielles.
Pour plus de détails: $ man 5 [Link]
• [Install] Indique dans quelle Target cette unité doit être démarrée.
7
EXEMPLE
NGINX
8
L'Unit Systemd Mount
• [Unit] Conflicts liste les Units qui ne
peuvent pas être utilisées avec cette
Unit (mutuellement exclusives).
• [Mount] Définit l'endroit où le
montage doit être effectué.
9
L'Unit Systemd Socket
• Un socket crée une méthode permettant aux applications de communiquer entre elles.
• Un socket peut être défini comme un fichier, mais aussi comme un port sur lequel
Systemd écoutera les connexions entrantes.
• Un service n’a pas besoin de s’exécuter en continu, il ne démarrera que si une
connexion arrive sur le socket spécifié.
10
L'Unit Systemd Socket
• ListenStream: Cette option définit le port TCP que Systemd doit écouter pour les
connexions entrantes.
11
Target Unit
• Target Unit est « un groupe d’Units » utilisées, par exemple, pour définir l'état dans
lequel un serveur doit être démarré.
• D'autres Target sont un groupe de services qui facilitent la gestion d' Units individuelles.
• Pour permettre de charger les Units dans le bon ordre et au bon moment, on utilise un
Target.
12
Target Unit
• [Link] est un exemple; vous pouvez l'utiliser pour démarrer ou arrêter facilement
toutes les unités nécessaires à la fonctionnalité d'impression.
• Les Target peuvent avoir des dépendances par rapport à d'autres Target. Ces
dépendances sont définies dans l'Unit Target.
• Exemple : [Link] définit toutes les unités qui doivent toujours être démarrées.
13
[Link]
Il définit l'ordre de chargement, en utilisant l'instruction After dans la section [Unit].
Le fichier cible ne contient pas d'informations sur les unités qui doivent être incluses.
$ systemctl list-dependencies pour un aperçu de toutes les dépendances
existantes.
14
[Link]
Lors de l'ajout d'une Unit à un Target, un lien symbolique est créé dans le répertoire
cible dans /etc/systemd/system.
Ce lien symbolique est appelé wants, car il définit ce que la cible souhaite démarrer
lors de son traitement.
15
Administration des Units avec systemd
La gestion de l'état actuel des Units Systemd est une tâche importante d'un
administrateur.
Gérer les Units signifie: gérer leur état actuel, mais également modifier les options
utilisées.
En tant qu'administrateur, la gestion des unités Systemd commence par le
démarrage et l'arrêt des Units.
Vous utilisez la commande systemctl pour ce faire.
16
systemctl status
Status Description
Loaded Le fichier Unit a été traité et l'Unit est active.
Active (running) L'Unit fonctionne avec un ou plusieurs processus actifs.
Active (exited) L'Unit a terminé avec succès une exécution unique.
Active (waiting) L'Unit est en marche et attend un événement.
Inactive (dead) L'Unit ne marche pas.
Enabled L'Unit sera démarrée au moment du démarrage (boot).
Disabled L'Unit ne va pas démarrée au moment du démarrage (boot).
17
Des commandes systemctl
Pour obtenir un aperçu actuel de l’état des fichiers d’Unit Systemd.
Commande Description
systemctl --type=service Affiche uniquement les Units de type service
systemctl list-units --type=service Affiche toutes les unités de service actives (même
résultat que la commande précédente)
systemctl list-units --type=service Affiche les Units de service inactives ainsi que les
--all Units de service actives
systemctl --failed --type=service Affiche tous les services qui ont échoué
systemctl status -l [Link] Affiche des informations de status détaillées sur ce
service
18
Les types de dépendances
Pour garantir une gestion précise des dépendances, différents mots-clés sont utilisés dans
la section [Unit] d'une Unit:
Requires (Nécessite) : Si cette Unit est chargée, les Units répertoriées ici se chargeront
également. Si l’une des autres Units est désactivée, cette Unit sera également
désactivée.
Requisite (Condition requise) : Si l'Unit répertoriée ici n'est pas déjà chargée, cette
Unit échouera. Elle n'implique pas de dépendance d'ordre, même si les deux unités
sont démarrées dans la même transaction.
19
Les types de dépendances
Pour garantir une gestion précise des dépendances, différents mots-clés sont utilisés dans
la section [Unit] d'une Unit:
Wants : Cette unité souhaite charger les unités répertoriées ici, mais elle n'échouera
pas si l'une des Units répertoriées échoue.
Before : Cette Unit démarrera avant l'Unit spécifiée avec Before.
After : Cette Unit démarrera après l'Unit spécifiée avec After.
20
Gestion des options
Pour modifier des fichiers d'Unit avec des options, vous devez vous assurer que les
modifications sont écrites dans /etc/systemd/system, qui est l'emplacement où les
fichiers d'unité personnalisés doivent être créés.
La méthode recommandée pour le faire consiste à utiliser la commande
$ systemctl edit [Link]
Cela crée un sous-répertoire dans /etc/systemd/system pour le service que vous
modifiez.
21
Gestion des options
Tapez la commande $ systemctl edit [Link]
Le répertoire portant le nom /etc/systemd/systemd/[Link].d est créé,
dans lequel un fichier portant le nom [Link] est créé.
Les options appliquées dans ce fichier écrasent celles existantes dans le fichier de service
dans /usr/lib/systemd/system
22
Exercice 1 (systemctl options)
1. Tapez $ yum -y install vsftpd pour installer le service FTP très sécurisé.
2. Tapez $ systemctl start vsftpd pour activer le serveur FTP sur votre machine.
3. Tapez $ systemctl status vsftpd
23
Exercice 1 (systemctl options)
1. Tapez $ yum -y install vsftpd pour installer le service FTP très sécurisé.
2. Tapez $ systemctl start vsftpd pour activer le serveur FTP sur votre machine.
3. Tapez $ systemctl status vsftpd
24
Exercice 1 (suite)
Le service vsftpd est actuellement
opérationnel.
La ligne loaded que le service est
actuellement désactivé, ce qui signifie qu'il
ne sera pas activé lors d'un redémarrage
du système.
Le préréglage du fournisseur de vsftp
apparaît également comme disabled, ce
qui signifie que par défaut, après
l'installation, cette unité ne sera pas
automatiquement activée.
25
Exercice 1 (suite)
4. Tapez $ systemctl enable vsftpd. Cela crée un lien symbolique dans le
répertoire des wants pour la multiusers target afin de garantir que le service est
automatiquement démarré après un redémarrage du système.
5. Tapez à nouveau $ systemctl status vsftpd. Vous verrez maintenant que le
fichier Unit est passe de disabled à enabled.
26
Exercice 2 (httpd)
1. Tapez $ yum install httpd pour installer le package du serveur Web Apache.
2. Tapez $ systemctl cat [Link] pour afficher la configuration actuelle
du fichier Unit qui démarre le serveur Web Apache.
3. Tapez $ systemctl show [Link] pour obtenir un aperçu des options de
configuration disponibles pour ce fichier Unit.
4. Tapez $ systemctl edit [Link] pour modifier la configuration par
défaut et assurez-vous que la section [Unit] inclut les lignes Restart=always et
RestartSec=5s.
27
Exercice 2 (suite)
5. Tapez $ systemctl daemon-reload pour vous assurer que Systemd récupère la
nouvelle configuration.
6. Tapez $ systemctl restart httpd pour redémarrer le service httpd.
7. Tapez $ systemctl status httpd puis répétez après 5 secondes.
Vous remarquerez que le processus httpd est automatiquement redémarré.
28
Lab 1 ([Link])
Rappel:
systemd socket est utilisé avec un service pour le démarrer quand le traffic
passe par la socket.
Le service et la socket doivent avoir le même nom.
Listenstream pour écouter le port TCP.
On peut Activer/Démarrer des sockets, et c'est elle qui se chargera de
démarrer (trigger) le service du même nom.
29
Lab 1 (suite)
1. $ systemctl list-unit-files –t socket (-t pour filtrer une catégorie de
Units)
2. $ systemctl cat [Link] pour la description
3. $ systemctl status [Link] , vous verrez que le service est
inactive.
4. $ systemctl enable --now [Link], le service cockpit
est active(refaites l'étape 3).
5. Dans le navigateur, tapez: [Link] , utilisez le
login root et le mot de passe.
6. Pour terminer le service, fermez le navigateur.
30
Lab 2 (timers)
Rappel:
systemd timer est utilisé pour démarrer un service correspondant à un moment
précis ou à un événement.
Le timer et le service doivent avoir le même nom.
OnCalendar pour spécifié quand (la même syntaxe de cron).
D'autre événements OnBootSec et OnUnitActiveSec.
On démarre le timer et non le service!!
31
Lab 2 (suite)
1. $ systemctl list-unit-files –t timer(-t pour filtrer une catégorie
de Units)
2. $ systemctl cat [Link] pour la description (optimisation du
stockage dans les SSD)
Notez qu'il a une fréquence de semaine (OnCalendar)
3. $ systemctl enable --now [Link], le service est active.
32
Lab 3
1. Installez les services vsftpd et httpd.
2. Changez l'editeur de nano vers vi
$ export SYSTEMD_EDITOR="/bin/vim"
3. Modifiez le fichier unit [Link] de telle sorte que le démarrage de httpd
démarre toujours automatiquement vsftpd. Modifiez le service httpd de telle sorte
qu'après un échec, il soit automatiquement redémarré dans 10 secondes.
33
Lab 3 (suite)
4. Modifiez le fichier de conf, de telle sorte que le httpd doit démarrer
automatiquement après un crash.
Nb : Pour simuler un crash $ sudo killall httpd
34