Systemd

De UnixManiax
Aller à : navigation, rechercher


Systemd

Présentation

Systemd est le remplaçant de Sys V init pour la gestion des services et du démarrage sous linux. Il est utilisé par défaut sous Redhat/CentOS depuis la version 7. Il reprend le principe de fonctionnement de svcadm sous Solaris 10 et plus. Comme pour svcadm, les services se lancent tous en parallèle, mais ne démarrent vraiment que lorsque les services dont ils dépendent sont actifs. Par exemple, le service sshd se lance et vérifie que le réseau est démarré ; tant que le réseau n'est pas actif, il attend ; dès qu'il le voit, il démarre. Ca permet de paralleliser au maximum les services au démarrage, pour gagner un maximum de temps.

De même que svcadm, systemd ne gère plus les runlevels, mais introduit la notion de target (les milestones sous Solaris). Cela correspond à un certain niveau de service atteint.

Concernant la gestion des services, systemd corrige ce que je considère comme un problème sous Solaris. Quand on arrête un service sous Solaris 10 et plus, ce service est automatiquement désactivé au démarrage. Idem quand on le démarre. Alors que systemd fait la différence entre activer un service (faire en sorte qu'il se lance au démarrage du serveur) et le démarrer.


Gestion des services

Prennons l'exemple du démon sshd. Voici comment voir son status, l'arrêter, le démarrer et faire un restart.

systemctl status sshd
systemctl stop sshd
systemctl start sshd
systemctl restart sshd

Et maintenant voici comment l'activer puis le désactiver au boot.

systemctl enable sshd
systemctl disable sshd

Pour voir si un service est activé au démarrage.

systemctl is-enabled sshd

Pour avoir des informations détaillées sur le service.

systemctl show sshd

On a également l'argument mask qui désactive le service, et empêche son lancement ou son activation tant qu'on n'a pas fait un unmask.

systemctl mask sshd
systemctl unmask sshd

Il existe encore d'autres options que vous pourrez trouver dans la page man.


Les targets

Comme expliqué dans la présentation, les targets viennent en remplacement des runlevels. Ils sont semblables aux milestones Solaris. Sur un serveur, la target par défaut est multi-user.target. Sur un poste de travail c'est graphical.target.

Chaque target correspond à un certain état du système, correspondant à un certain nombre de services démarrés.

Voir la liste des targets.

systemctl list-units --type=target

Voir la targer par défaut.

systemctl get-default

Changer la target courante.

systemctl isolate multi-user.target

Changer la target par défaut.

systemctl set-default multi-user.target


Arrêt du serveur

Systemd gère également l'arrêt et le reboot du serveur. En fait, les commandes habituelles, comme reboot vont lancer les targets correspondantes, par exemple reboot.target. Mais c'est transparent pour nous. A noter que halt arrête le système d'exploitation, mais n'arrête pas électriquement le serveur ; il faut utiliser halt -p, ou poweroff sans option.