Aller à la recherche

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.

La discussion continue ailleurs

URL de rétrolien : https://www.binsp.net/?trackback/11

Fil des commentaires de ce billet

Page top