19
0
Fork 0

ajout des commandes systemctl edit/cat

This commit is contained in:
gcolpart 2017-02-23 19:26:04 +01:00
parent e4de8e3232
commit f28530fa56
1 changed files with 36 additions and 26 deletions

View File

@ -8,9 +8,9 @@ title: Howto systemd
[systemd](https://www.freedesktop.org/wiki/Software/systemd/) est un gestionnaire de services (le fameux démon avec le PID 1) en alternative au System V. Il est installé par défaut depuis Debian 8. Son utilisation a suscitée des débats au sein de l'équipe, mais nous l'utilisons sur tous nos serveurs en Debian 8.
# Utilisation de base
## Utilisation de base
## Statut systemd
### Statut systemd
Afficher le statut :
@ -40,7 +40,7 @@ Lister les unités installées :
> *Note* : Les unités sont par défaut dans `/usr/lib/systemd/system/` et `/etc/systemd/system/` (gestion manuelle)
## Gestion des unités
### Gestion des unités
<https://www.freedesktop.org/software/systemd/man/systemd.unit.html>
@ -100,7 +100,7 @@ Recharger systemd pour prendre en compte les unités modifiées :
~~~
## Redémarrer ou éteindre un serveur
### Redémarrer ou éteindre un serveur
Avec systemd, les commandes halt/poweroff/shutdown/reboot n'existent plus !
Ce sont des désormais des liens symboliques vers **systemctl**.
@ -121,11 +121,11 @@ Redémarrer le serveur :
> *Note* : l'option `--force` permet de killer tous les process sans attendre leur extinction propre (à éviter bien sûr)
# Rédaction des unités
## Rédaction des unités
<https://www.freedesktop.org/software/systemd/man/systemd.service.html>
## Modifier une unité
### Modifier une unité
~~~
# cp -a /lib/systemd/system/<service>.service /etc/systemd/system/
@ -156,11 +156,9 @@ Alias=sshd.service
> **Note** : Chaque fois qu'une unité est modifiée, il est nécessaire de recharger systemd avec `systemctl daemon-reload`.
## Modifier partiellement une unité
### Modifier partiellement une unité
Au lieu de tout ré-écrire, on peut « override » une partie de l'unité en créant un fichier dans `/etc/systemd/system/unit.d/` qui précisera les modifications à faire. Exemple avec l'unité de _varnish_ :
Dossier `/etc/systemd/system/varnish.service.d`, fichier `/etc/systemd/system/varnish.service.d/varnish.service` :
Au lieu de tout ré-écrire, on peut surcharger une partie de l'unité en créant un fichier dans `/etc/systemd/system/NOM_UNITÉ.service.d/` qui précisera les modifications à faire. Exemple avec l'unité de _varnish_ on crée le fichier `/etc/systemd/system/varnish.service.d/override.conf` :
~~~
[Service]
@ -168,8 +166,20 @@ ExecStart=/usr/sbin/varnishd -a 0.0.0.0:80 -T localhost:6082 -f /etc/varnish/def
ExecReload=/etc/varnish/reload-vcl.sh
~~~
# Utiliser les templates d'unités
On peut directement utiliser la commande suivante pour surcharger une unité :
~~~
# systemctl edit varnish
~~~
On pourra ensuite lister l'unité complète vue par _systemd_ :
~~~
# systemctl cat varnish
~~~
## Utiliser les templates d'unités
On peut créer/utiliser des templates d'unités. Cela permet de gérer à la volée des instances de services.
@ -201,7 +211,7 @@ On pourra ensuite démarrer l'instance foo et bar avec :
~~~
# systemd par utilisateur
## systemd par utilisateur
systemd fonctionne avec le PID 1. Mais il est aussi possible de lancer des instances par utilisateur avec le paramètre `--user`. C'est très pratique pour donner les droits à un utilisateur de gérer lui-même ses services (instances _Tomcat_ par exemple).
Il faut avoir le paquet `libpam-systemd` installé : une session systemd est lancée quand on est connecté à la machine :
@ -264,7 +274,7 @@ export XDG_RUNTIME_DIR="/run/user/$UID"
~~~
# Utilisation avancée
## Utilisation avancée
Afficher plein d'informations sur l'unité :
@ -297,9 +307,9 @@ Startup finished in 5.019s (firmware) + 6.128s (loader) + 5min 35.864s (kernel)
~~~
# FAQ
## FAQ
## Bind9
### Bind9
Sous Debian 8, l'adoption de systemd est récente et de nombreuses services ont des unités mal écrites. Notamment elles ne gèrent souvent pas les options dans _/etc/default/_ alors qu'un fichier est créé par défaut.
@ -323,11 +333,11 @@ puis :
# systemctl daemon-reload
~~~
## strace d'un process
### strace d'un process
Avant systemd, une astuce efficace pour stracer un démon multi-process était de faire `strace -ff /etc/init.d/<démon> start` …mais ça n'est plus possible avec systemd : il faut désormais détecter le PID du processus père du démon pour faire un `strace -ff -p<PID>`.
Avant _systemd_, une astuce efficace pour stracer un démon multi-process était de faire `strace -ff /etc/init.d/<démon> start` …mais ça n'est plus possible avec systemd : il faut désormais détecter le PID du processus père du démon pour faire un `strace -ff -p<PID>`.
Exemple pour faire un strace Apache, on récupère le PID, on lance le _strace_ puis on fait un graceful :
Exemple pour Apache, on récupère le PID, on lance le _strace_ puis on fait un _graceful_ :
~~~
# pstree -pan | grep -v grep | grep apache | head -1
@ -335,18 +345,18 @@ Exemple pour faire un strace Apache, on récupère le PID, on lance le _strace_
# apache2ctl graceful
~~~
## networking
### 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
### 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
### systemd-fsck : Dependency failed
Vous obtenez _systemd-fsck : Dependency failed for File System Check on /dev/disk/foo_ ?
@ -369,11 +379,11 @@ 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 !
## systemd VS systemD VS SystemD
### systemd VS systemD VS SystemD
**systemd** ne prend aucune majuscule. Ce n'est pas SystemD ou systemD.
## Migrer de sysvinit à systemd
### Migrer de sysvinit à systemd
Cette action peut être nécessaire lorsque l'on migre de Debian Wheezy à Jessie.
@ -386,11 +396,11 @@ sysvinit-core
et vérifier que GRUB ne se lance pas avec l'option `init=/lib/sysvinit/init`.
## Et les scripts dans /etc/init.d/ ?
### Et les scripts dans /etc/init.d/ ?
Avec systemd, pourquoi reste-t-il des scripts dans `/etc/init.d/` ?
systemd prend en compte les scripts dans `/etc/init.d/` :
* les scripts « classiques » sont pris en compte si il n'existe d'unité systemd avec le même nom (sa description commence alors par **LSB:**)
* les scripts « classiques » sont pris en compte si il n'existe pas d'unité systemd avec le même nom (sa description commence alors par **LSB:**)
* certains scripts sont juste là par compatibilité afin de pouvoir faire `/etc/init.d/foo start/stop/restart/status` mais c'est en fait l'unité systemd qui est prise en compte