22
0
Fork 0
This commit is contained in:
Benoît S. 2016-12-14 15:09:19 +01:00
parent eff81b1dec
commit 21299ff14c
1 changed files with 131 additions and 0 deletions

131
HowtoSystemd.md Normal file
View File

@ -0,0 +1,131 @@
# 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>.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 !