Différences entre versions de « Systemctl »

De The Linux Craftsman
Aller à la navigation Aller à la recherche
Ligne 74 : Ligne 74 :
 
Il est possible de ne pas ajouter le ''.service'', ''systemctl'' comprendra très bien qu'il s'agit d'un service !
 
Il est possible de ne pas ajouter le ''.service'', ''systemctl'' comprendra très bien qu'il s'agit d'un service !
 
= Systemctl =
 
= Systemctl =
 +
Nous allons passer en revue les ''unités'' que nous pouvons manipuler avec ''systemctl'' !
 +
== Gestion des disques ==
 +
''systemctl'' est capable de gérer les points de montage et de monter automatiquement un emplacement physique dans un répertoire.
 +
Dans cet exemple, le disque ''sdb'' à déjà été [[Gestion_des_disques#Cr.C3.A9ation_d.27une_partition |partitionné]] et [[Gestion_des_disques#Formatage|formaté]], il ne reste plus qu'à le monter. Traditionnellement nous aurions utilisé la commande [[Gestion_des_disques#mount | ''mount'']] et modifié le fichier [[Gestion_des_disques#fstab |''/etc/fstab'']] pour rendre le point de montage persistant. Maintenant nous allons créer un fichier ''opt-sdb.mount'' dans le répertoire ''/etc/systemd/system/'' :
 +
<pre>
 +
[Unit]
 +
Description=Deuxième disque
 +
 +
[Mount]
 +
What=/dev/sdb1
 +
Where=/opt/sdb
 +
Type=ext4
 +
Options=defaults
 +
 +
[Install]
 +
WantedBy=local-fs.target
 +
</pre>
 +
Maintenant que le fichier de montage est crée, on peut en informer ''systemctl'' :
 +
<pre>
 +
# systemctl daemon-reload
 +
</pre>
 +
et démarrer le point de montage :
 +
<pre>
 +
# systemctl start opt-sdb.mount
 +
</pre>
 +
Rien ne nous empêche, comme pour les services, de l'enregistrer au démarrage :
 +
<pre>
 +
# systemctl enable opt-sdb.mount
 +
</pre>
 +
On peut même contrôler l'état du point de montage :
 +
<pre>
 +
# systemctl list-units --type=mount | grep opt-sdb
 +
opt-sdb.mount          loaded active mounted Deuxième disque
 +
</pre>
 +
{|style="width:800px" align="center"
 +
|
 +
[[Fichier:Warning manual.jpg|centré|300px]]
 +
|valign="top"|
 +
Le nom du fichier doit '''absolument''' correspondre à la destination du point de montage sous peine d'avoir l'erreur suivante :
 +
 +
''systemd[1]: sdb.mount's Where= setting doesn't match''.
 +
 +
Par exemple, si votre point de montage est ''/opt/sdb'' le fichier '''doit''' s'appeler ''opt-sdb.mount'' !
 +
|}

Version du 27 décembre 2017 à 22:18

Introduction

Déni, Colère, Expression, Dépression, Acceptation

Nous étions habitués aux commandes service, chkconfig ou encore init mais maintenant c'est de l'histoire ancienne puisque SysVInit à été remplacé par SystemD, le nouveau gestionnaire de démarrage écrit par RedHat.

On peut se demander pourquoi on change un système qui fonctionne ?

La raison est simple : SysVInit est lent, mal architecturé, possède des faiblesses. C'en était trop pour certain et c'est pourquoi, d'une architecture modulaire (chacun sa tâche), nous sommes passé à une architecture centralisée (une seule commande). Ce nouveau moteur est écrit en C et permet un démarrage parallélisé des processus plutôt qu'en série. Les développeur d'Ubuntu avaient commencé le travail en écrivant UStart mais n'étaient pas allé jusqu'au bout des choses !

Ci-dessous un dessin expliquant comment se déroule le démarrage du système :

Comparing services start.png

Explication de texte

On voit clairement le gain de temps au démarrage du système ! Une question vient à l'esprit, comment est-ce possible ? La réponse se trouve dans le type de socket utilisées pour la communication entres les services : on est passé de socket AF_INET, orienté réseaux, à des socket AF_UNIX, orientée système.

Le premier type de socket, AF_INET, permet des réseau entre les services surtout utilisée dans les systèmes distribués et plus vraiment d'actualité sur un système centralisé. Ce qui explique cette migration vers des sockets AF_UNIX, qui sont des sockets système, c'est à dire un fichier.

Les sockets AF_UNIX ne nécessitent pas la présence d'un programme pour démarrer et sont donc créées par le système d'exploitation au démarrage. Les services démarrent en parallèle et se branchent à la socket quand ils sont prêt.

Maintenant, que faire ?

Ci-dessous un tableau qui fait le lien entre les anciennes et les nouvelles commandes :

SysVInit SystemD Description
service $daemon start systemctl start $daemon.service Permet de démarrer $daemon
service $daemon stop systemctl stop daemon.service Permet de stopper $daemon
service $daemon restart systemctl restart $daemon.service Permet de redémarrer $daemon
service $daemon reload systemctl reload $daemon.service Permet de recharger la configuration de $daemon
X systemctl reload-or-restart $daemon Permet de recharger ou redémarrer $daemon
service $daemon status systemctl status $daemon Affiche des informations sur le service $daemon
chkconfig $daemon on systemctl enable $daemon.service Permet d'enregistrer $daemon au démarrage du système
chkconfig $daemon off systemctl disable $daemon.service Permet d'effacer $daemon du démarrage du système
chkconfig $daemon systemctl is-enable $daemon.service Permet de voir si $daemon est actif au démarrage du système
chkconfig $daemon --list systemctl is-enable $daemon.service Permet de voir si $daemon est actif au démarrage du système
X systemctl is-failed $daemon.service Retourne la valeur active si le service fonctionne sinon failed
X systemctl list-units [--all] [--state=inactive] [--type=service] Liste toutes les unités gérées par systemctl

Il est possible de ne pas ajouter le .service, systemctl comprendra très bien qu'il s'agit d'un service !

Systemctl

Nous allons passer en revue les unités que nous pouvons manipuler avec systemctl !

Gestion des disques

systemctl est capable de gérer les points de montage et de monter automatiquement un emplacement physique dans un répertoire. Dans cet exemple, le disque sdb à déjà été partitionné et formaté, il ne reste plus qu'à le monter. Traditionnellement nous aurions utilisé la commande mount et modifié le fichier /etc/fstab pour rendre le point de montage persistant. Maintenant nous allons créer un fichier opt-sdb.mount dans le répertoire /etc/systemd/system/ :

[Unit]
Description=Deuxième disque

[Mount]
What=/dev/sdb1
Where=/opt/sdb
Type=ext4
Options=defaults

[Install]
WantedBy=local-fs.target

Maintenant que le fichier de montage est crée, on peut en informer systemctl :

# systemctl daemon-reload

et démarrer le point de montage :

# systemctl start opt-sdb.mount

Rien ne nous empêche, comme pour les services, de l'enregistrer au démarrage :

# systemctl enable opt-sdb.mount

On peut même contrôler l'état du point de montage :

# systemctl list-units --type=mount | grep opt-sdb
opt-sdb.mount           loaded active mounted Deuxième disque
Warning manual.jpg

Le nom du fichier doit absolument correspondre à la destination du point de montage sous peine d'avoir l'erreur suivante :

systemd[1]: sdb.mount's Where= setting doesn't match.

Par exemple, si votre point de montage est /opt/sdb le fichier doit s'appeler opt-sdb.mount !