wiki/HowtoSystemd.md
2016-12-14 15:09:19 +01:00

4.1 KiB

Howto systemd

https://www.freedesktop.org/wiki/Software/systemd/

systemd est un gestionnaire de services (démon avec le PID 1) en alternative au System V. Il est utilisé par défaut depuis Debian 8.

Utilisation de base

# systemctl list-units
# systemctl list-jobs
# systemctl status <service> -l
# systemctl stop/start/restart/reload <service>
# systemctl disable/enable <service>

# systemctl reboot
# systemctl poweroff

# journalctl
# journalctl -u <service>
# journalctl --since="2016-02-04 13:37:00" --until="2016-02-04 13:42:00"

Modifier un service

# cp -a /lib/systemd/system/<service>.service /etc/systemd/system/
# vim /etc/systemd/system/<service>.service
# systemctl daemon-reload

Syntaxe des fichiers .service : https://www.freedesktop.org/software/systemd/man/systemd.service.html

Exemple avec ssh.service sous Debian 8 :

[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run

[Service]
EnvironmentFile=-/etc/default/ssh
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=sshd.service

Utilisation avancée

# systemctl show <service>

Debug au démarrage accessible sur tty9 :

# systemctl enable debug-shell

Debug sur le démarrage :

# systemd-analyze 
Startup finished in 5.019s (firmware) + 6.128s (loader) + 5min 35.864s (kernel) + 20min 3.148s (userspace) = 25min 50.160s
# systemd-analyze blame | head -3
          2.029s systemd-udev-settle.service
          1.400s docker.service
          1.215s uml-utilities.service

Migrer de sysvinit à systemd

# apt install systemd-sysv
The following packages will be REMOVED:
  sysvinit-core
# reboot

Vérifier que GRUB ne se lance pas avec l'option init=/lib/sysvinit/init

FAQ

Bind9

Sous Debian 8, l'unité par défaut ne gère par les options dans /etc/default/bind

Voir http://trac.evolix.net/infogerance/wiki/HowtoDebian/MigrationWheezyJessie#Bind

strace Apache (TODO)

Une astuce efficace pour stracer un serveur de type Apache était : strace -s65535 -ff /etc/init.d/apache2 restart. Ensuite on joue la requête et on des infos (impossible à faire en prod bien sûr!). Avec systemd, le strace ne suit pas les forks malgré -ff. À voir pourquoi systemd empêche ça…

networking

Sous Debian 8, le démarrage du système se bloque complètement (dead lock) si l'initialisation de process dépendant du réseau (comme NFS, NTP, firewalling…) se fait avant que le réseau soit démarré. Notamment quand ils sont démarrés via des hooks dans /etc/network/if-*/…cela n'était pas bloquant avec SysV, cf https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=754218#30

Astuces "bourrin" : ajouter "exit 0" dans /etc/init.d/networking et voir le souci via systemctl status networking -l ; modifier JobTimeoutUSer => "systemctl show networking -p JobTimeoutUSer"

Failed to get D-Bus connection: Unknown error -1

Si en utilisant systemctl vous obtenez une erreur "Failed to get D-Bus connection: Unknown error -1" vérifiez si vous êtes bien passé à systemd et n'êtes resté à sysvinit !

systemd-fsck : Dependency failed for File System Check on /dev/disk/xxx

Par défaut, systemd-fsck attend 1m30 l'accès à chaque device disque. Pour diverses raisons (accès à un SAN externe, etc.) cela peut échouer, vous aurez alors :

systemd[1]: Job dev-disk-by\x2dlabel-foo.device/start timed out.
systemd[1]: Timed out waiting for device dev-disk-by\x2dlabel-foo.device.
systemd[1]: Dependency failed for /backup.
systemd[1]: Dependency failed for Local File Systems.
systemd[1]: Triggering OnFailure= dependencies of local-fs.target.
systemd[1]: Dependency failed for File System Check on /dev/disk/by-label/foo.

Vous pouvez alors ajouter différentes options via le fstab, du type :

LABEL=foo    /foo ext4    defaults,nofail,x-systemd.device-timeout=120 0 0

Notamment "nofail" pour éviter que cela fasse échouer votre séquence de boot !