Systemd : La gestion des services mais pas que...
Systemd est le gestionnaire de services qui remplace Sys init (Sys V) Il est le tout premier service lancé au démarrage du système et va gérer les autres services en assurant leur initialisation. Il va pouvoir les lancer en parallèle (qui est un des gros avantage de sysmtemd sur Sys init). Suivre les services grâce au groupe de contrôle, gérer la journalisation avec journald, configurer le nom d’hôte, les montages des systèmes de fichier. C'est lui aussi qui va gérer les ressources utilisateur avec les cgroups et pour finir, gérer les machines virtuelles et conteneurs avec les cgroups et libvirt...
Ici nous allons commencer doucement en fessant un tour d'horizon des possibilités
Systemd : la gestion de services
Systemd se base sur une notion d’unit qui ont un type et un nom. Il existe plusieurs types d'units'
- Service : gestion des 'daemons'
- Target : regroupe plusieurs units avec des niveaux d’exécution
- Mount : gestion des FS
- Snapshot : permet de sauvegarder et restaurer l'état des services
- Device : qui permet de charger des périphériques de type particulier
- ...
Gestions des services
Lister tous les services en cours
systemctl list-units
Lister tous les services de type service
systemctl list-units --type service
Afficher le contenu du fichier service
systemctl cat dhcpcd.service
# /usr/lib/systemd/system/dhcpcd.service [Unit] Description=dhcpcd on all interfaces Wants=network.target Before=network.target [Service] Type=forking PIDFile=/run/dhcpcd.pid ExecStart=/usr/bin/dhcpcd -q -b ExecStop=/usr/bin/dhcpcd -x [Install] WantedBy=multi-user.target
Status d'un service
systemctl status dhcpcd.service
● dhcpcd.service - dhcpcd on all interfaces Loaded: loaded (/usr/lib/systemd/system/dhcpcd.service; enabled; vendor preset: disabled) Active: active (running) since Thu 2016-12-29 11:39:21 CET; 14h ago Process: 491 ExecStart=/usr/bin/dhcpcd -q -b (code=exited, status=0/SUCCESS) Main PID: 498 (dhcpcd) Tasks: 1 (limit: 4915) CGroup: /system.slice/dhcpcd.service └─498 /usr/bin/dhcpcd -q -b
Savoir si un service est actif
systectl is-active sshd
inactive
Arrêter et démarrer un service
systemctl stop postfix.service
systemctl is-active postfix
inactive
systemctl star postfix.service
systemctl is-active postfix
active
Recharger un fichier de configuration
systemctl reload postfix.service
Activer un service pour qu'il se lance au démarrage
systemctl enable postfix
Désactiver (au démarrage) un service
systemctl disable postfix
Niveau de fonctionnement
systemctl get-default
multi-user.target
Changer de niveau de fonctionnement
systemctl set-default graphical.target
Création de service personnalisé
Les services systèmes sont stockés dans /usr/lib/systemd/system La création de service se fait dans le répertoire /etc/systemd/system
Création d'un fichier (StatsFromApache.service) dans /etc/systemd/system
[Unit] Description=Export apache log [Service] # service de création de rapport grâce au log apache Type=simple # simple : service par defaut # oneshot : lance et attend la fin du processus # forking : exécute un autre service ou application ExecStart = /bin/sh -c '/usr/bin/createApacheLogStats.sh' [Install] WantedBy=multi-user.target
Activer le service
systemctl enable StatsFromApache.service
systemctl start StatsFromApache.service
Monter des systèmes de fichier au démarrage grâce à systemctl
Créons un disque avec qemu-img
qemu-img create -f qcow2 /hdd/projets.qcow2 10G
Formatons-le en ext4
mkfs.ext4 /hdd/projets2.qcow2
Créons notre répertoire ou l’on va monter notre disque
mkdir /mnt/projets
Finition par la création d’un fichier unit de type mount dans /etc/systemd/system/ et qui aura pour nom mnt-projets.mount (ici le nom est important et doit correspondre à la variable Where dans le fichier.
[Unit] Description=Montage disque projets [Mount] What=/hdd/projets.qcow2 Where=/mnt/projets Type=ext4 [Install] WantedBy=multi-user.target
Il nous suffira d’activer le service pour que le montage se fasse au démarrage du système.
systemctl enable mnt-projets.mount
Created symlink /etc/systemd/system/multi-user.target.wants/mnt-projets.mount → /etc/systemd/system/mnt-projets.mount.
Nous devons maitnenant démarrer le service pour acceder au montage
systemctl start mnt-projets.mount
Automount avec Systemd
Nous allons voir ici comment monter automatique un device lorsque l’on fait un accès à celui-ci. Nous allons créer un fichier unit /etc/systemd/system/projet.automount, systemd étant capable de retrouver le device à monter (grâce au fichier mnt-projet.mount), il est donc pas nécessaire de préciser le « What ».
[Unit] Description=Montage et démontage automatique [Automount] Where=/mnt/projets [Install] WantedBy = multi-user.target
Tout d’abord arrêtons le montage s’il est lancé
systemctl stop projet.mount
systemctl disable projet.mount
Maintenant activons l’automount
systemctl enable projet.automount
systemctl start projet.automount
Maintenant notre disque sera directement monté juste en accédant à /mnt/projets.
mount | grep projets
systemd-1 on /mnt/projets type autofs (rw,relatime,fd=27,pgrp=1,timeout=0,minproto=5,maxproto=5,direct)
Si on essaye d’accéder à notre répertoire
ls -l /mnt/projets
Nous avons le contenu de notre répertoire qui a été automatiquement monté
mount | grep projets
systemd-1 on /mnt/projets type autofs (rw,relatime,fd=27,pgrp=1,timeout=0,minproto=5,maxproto=5,direct) /hdd/projets.qcow2 on /mnt/projets type ext4 (rw,relatime,block_validity,delalloc,barrier,user_xattr,acl)
Voilà, une première approche de systemd concernant les services et les montages, nous verront dans un prochain billet la gestion des ressources système.