• 10 heures
  • Facile

Ce cours est visible gratuitement en ligne.

course.header.alt.is_video

course.header.alt.is_certifying

J'ai tout compris !

Mis à jour le 24/09/2018

Gérez les services de votre système avec systemd

Connectez-vous ou inscrivez-vous gratuitement pour bénéficier de toutes les fonctionnalités de ce cours !

systemd est le système d’initialisation adopté par toutes les dernières distributions Linux. Tout comme Upstart, il est basé sur des événements, ce qui rend son fonctionnement souple et dynamique. Il permet un démarrage en parallèle des processus avec une gestion très fine des dépendances. Il peut même redémarrer un processus qui se serait arrêté par erreur, gérer la planification des tâches, les logs système, les périphériques et plus encore.

Dans ce chapitre, vous allez apprendre à utiliser les principales fonctions de systemd relatives à la gestion des processus.

Gérez le démarrage et l’arrêt de vos processus

systemd est fourni avec la commande   systemctl  qui permet de gérer les “unités” (units en anglais). Pour systemd, une unité est un terme générique qui désigne tout objet sur lequel il va pouvoir agir. Les unités peuvent être de différents types : service, montage, périphérique, etc. Les daemons sont de type “service”. Vous appréhenderez d’autres types d’unités dans la suite de ce chapitre.

Dans le cours “Montez un serveur de fichiers sous Linux”, vous aviez déjà utilisé la commande  systemctl  pour lancer les serveurs Samba et NFS. Par exemple, vous aviez démarré Samba par la commande :

sudo systemctl start smbd

De la même façon, vous pouvez arrêter le serveur  smbd  par la commande :

sudo systemctl stop smbd

D’autres actions possibles sont :

  • restart  pour  stop  puis  start  en une seule commande

  • reload  pour mettre à jour la configuration sans couper le service (pour les services qui en sont capables)

  • status  pour connaître l’état de votre service

  • enable  pour lancer le service au démarrage

  • disable  pour ne pas lancer le service au démarrage

Si vous lancez la commande  systemctl  sans argument, ça équivaut à lancer la commande suivante qui liste toutes les unités “actives” :

systemctl list-units

Vous voyez qu’il y a beaucoup d’unités de toutes sortes. Si vous chercher le nom exact d’un service à lancer, vous pouvez filtrer cette liste pour n’afficher que les unités de type “service” :

systemctl list-units --type=service

Vous voyez que toutes les unités se terminent par “.service”. C’est parce que la configuration de chaque unité est définie dans un fichier dont le nom est du type NOM_DE_L_UNITE.TYPE_DE_L_UNITE. Presque tous les fichiers des unités sont dans  /lib/systemd/system  mais en fait vous n’avez pas besoin de connaître l’emplacement réel des fichiers car la commande  systemctl  permet de lire et d’éditer les fichiers d’unité. Je ne vais pas rentrer dans le détail de la syntaxe de ces fichiers mais sachez que vous pouvez afficher le contenu du fichier unité  smbd.service  par la commande :

systemctl cat smbd.service

Vous pouvez également éditer cette configuration par la commande :

sudo systemctl edit smbd.service

Cette commande ne va pas réellement modifier le fichier original mais plutôt créer un fichier de “surcharge” qui aura la priorité sur le fichier original. L’avantage est de pouvoir revenir à la configuration par défaut en cas de besoin en supprimant cette surcharge ;)

Si vous savez ce que vous faites et voulez éditer directement le fichier de configuration, utilisez la commande :

sudo systemctl edit --full smbd.service

Si vous deviez éditer un fichier unité de systemd, vous devriez ensuite faire prendre en compte vos changements au système par la commande :

sudo systemctl daemon-reload

Je vais maintenant vous parler des unités de type “target” qui remplacent les runlevels de systemV.

Utilisez les targets, évolution des runlevels de systemV

Vous pouvez afficher la liste des unités de type “target” par la commande :

sudo systemctl list-units --type target --all

Le terme anglais “target” signifie “cible”. Il permet d’amener le système à un certain état cohérent. À la différence des runlevels, vous voyez qu’il peut y avoir plusieurs target actives en même temps.

Certaines de ces target comme  swap.target  correspondent plutôt à des fonctions du système qu’on peut activer ou non et d’autres comme  graphical.target  correspondent à des états cohérents du système qui ont pour dépendances les différentes autres target. Vous pouvez d’ailleurs lister les dépendances d’une unité par la commande :

sudo systemctl list-dependencies graphical.target

Vous voyez ainsi toutes les targets et autres unités dont dépend  graphical.target  .

Vous pouvez voir la target par défaut par la commande :

sudo systemctl get-default

Vous pouvez changer de target par la sous-commande  isolate  . Par exemple, la commande suivante permet de passer en mode de secours (sans réseau, seulement root connecté) :

sudo systemctl isolate rescue.target

Vous pouvez fixer  graphical.target  comme target par défaut par la commande :

sudo systemctl set-default graphical.target

Une des nouveautés de systemd par rapport à ses prédécesseurs est la possibilité de pouvoir gérer les fichiers de logs par la commande  journalctl  .

Gérez vos logs avec journalctl

Par défaut, la commande  journalctl  affiche tous les logs gérés par systemd par ordre chronologiques :

sudo journalctl

Vous pouvez choisir de n’afficher les logs que depuis le dernier démarrage du système par la commande :

sudo journalctl -b

ou n’afficher que les logs du kernel depuis le dernier démarrage (équivalent de la commande  dmesg  ) par :

sudo journalctl -b -k

Vous pouvez aussi choisir d’afficher uniquement les logs d’un service (ici  smbd.service  ) ou d’une unité en particulier par la commande :

sudo journalctl -u smbd.service

systemd est un élément central du fonctionnement de toutes les dernières distributions Linux et il est probable qu’il prenne encore plus d’importance dans le futur. Il est donc important d’être familier avec ce système. Dans le prochain chapitre, vous apprendrez pourquoi et comment mettre en place un serveur de temps sur votre serveur.

En résumé

  • systemd gère des unités qui peuvent être de différents types

  • la gestion des unités se fait par la commande   systemctl

  • vous pouvez démarrer vos services par la commande  systemctl start SERVICE_NAME

  • les targets de systemd ont succédé aux runlevels de systemV

  • vous pouvez gérer vos logs système par la commande  journalctl

Exemple de certificat de réussite
Exemple de certificat de réussite