systemd et journald

Ce TD est à réaliser dans une machine virtuelle Fedora. Avec les machines vagrant :

$ vagrant up systemd
$ vagrant ssh systemd

Objectifs

  • Découvrir systemd et journald

systemd et journald

Etat des services

Listez l’état des services sur la machine :

$ systemctl
$ systemctl status

Inspectez l’état précis de quelques services :

$ systemctl status <service>

Tuez un service au hasard avec la commande kill et constater les changements de status. Il est possible de filtrer les résultats en n’affichant que les services disponibles (ou lancés ou en échec) :

$ systemctl --state=running
$ systemctl --state=active
$ systemctl --state=exited
$ systemctl --state=failed

Désactivez et arrêtez tous les services que vous pensez non nécessaire au fonctionnement du système :

$ systemctl disable <service>
$ systemctl stop <service>

Démarrage du système

Vérifiez que la « target » par défaut est bien multi-user.target :

$ systemctl get-default
$ systemctl set-default <target>

Etudiez la procédure de démarrage du système avec :

$ systemd-analyze plot > bootchart.svg

Le fichier bootchart.svg peut être affiché dans un navigateur. Pour le copier de la machine vagrant sur votre système, vous pouvez utiliser:

# Récupérer la configuration SSH pour la machine vagrant correspondante
$ vagrant ssh-config systemd > systemd.ssh_config
$ scp -F systemd.ssh_config systemd:path/to/file bootchart.svg
  • Question 1 : Dans quel ordre démarrent les services ?
  • Question 2 : Trouvez quatre services avec des dépendances et retrouvez cette information dans leur fichier d’unit.

Modifier certains paramètres pour un service précis

Modifiez quelques services sans modifier directement leur unit en utilisant :

$ systemctl edit <service>

Vous pouvez par exemple rajouter des variables d’environment à l’unit:

[Service]
Environment=Foo=Bar

Constatez les changements dans le dossier :

/etc/systemd/system/<service>.service.d/*..conf

Indiquez à systemd de recharger la configuration, redémarrer le service et vérifier que la modification a bien été appliquée :

$ systemctl daemon-reload
$ systemctl restart <service>(.service)
$ systemctl show service
$ systemctl status service
$ cat /proc/<PID>/environ

Question 3 : Indiquez qu’un service devra être relancé en cas d’interruption imprévue (chercher l’option Restart dans systemd.service(5)). Testez que cela fonctionne correctement.

Modifiez quelques services en copiant leur fichier d’unit par défaut dans le dossier :

$ cp /usr/lib/systemd/system/<unit>.service /etc/systemd/system/

Les modifications peuvent alors être effectuées directement dans l’unit. Attention, les modification dans le dossier *.service.d/*.conf sont toujours prises en compte. Pour afficher l’ensemble des configurations prises en compte pour un service par systemd :

$ systemctl cat <service>

Essayez et expliquez les commandes suivantes :

$ journalctl -e
$ journalctl -b -1
$ journalctl -b -0 _PID=333
$ journalctl -k
$ journalctl -u httpd
$ journalctl -f -n 50
$ journalctl /usr/bin/dbus-broker

Question 4 : Comment peut on afficher tous les logs qui ont été émis par le service Apache (httpd) entre 10h30 et 11h00 ce matin ?

Références