relecture
This commit is contained in:
parent
553c3884e7
commit
f70d62a5a1
105
HowtoSystemd.md
105
HowtoSystemd.md
|
@ -3,24 +3,16 @@ categories: system sysadmin
|
|||
title: Howto 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.
|
||||
* Manpages : <https://www.freedesktop.org/software/systemd/man/index.html>
|
||||
|
||||
> **Note**: systemd ne prend aucune majuscule. Ce n'est pas SystemD ou 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.
|
||||
|
||||
Site officiel du projet : <https://www.freedesktop.org/wiki/Software/systemd/>
|
||||
|
||||
Toutes les man pages : <https://www.freedesktop.org/software/systemd/man/index.html>
|
||||
Man pages utiles :
|
||||
|
||||
- <https://www.freedesktop.org/software/systemd/man/systemd.unit.html>
|
||||
- <https://www.freedesktop.org/software/systemd/man/systemd.service.html>
|
||||
- <https://www.freedesktop.org/software/systemd/man/systemd.exec.html>
|
||||
|
||||
# Utilisation de base
|
||||
|
||||
## Status de systemd
|
||||
## Statut systemd
|
||||
|
||||
Afficher le status :
|
||||
Afficher le statut :
|
||||
|
||||
~~~
|
||||
# systemctl status
|
||||
|
@ -47,42 +39,46 @@ Lister les unités installées :
|
|||
|
||||
> **Note** : Les unités sont dans `/usr/lib/systemd/system/` (packagé par debian) et `/etc/systemd/system/` (géré par l'administrateur).
|
||||
|
||||
## Utilisation des unités
|
||||
|
||||
## Gestion des unités
|
||||
|
||||
<https://www.freedesktop.org/software/systemd/man/systemd.unit.html>
|
||||
|
||||
Démarrer une unité :
|
||||
|
||||
~~~
|
||||
# systemctl start unit
|
||||
# systemctl start <unité>
|
||||
~~~
|
||||
|
||||
Arrêter une unité :
|
||||
|
||||
~~~
|
||||
# systemctl stop unit
|
||||
# systemctl stop <unité>
|
||||
~~~
|
||||
|
||||
Redémarrer une unité :
|
||||
|
||||
~~~
|
||||
# systemctl restart unit
|
||||
# systemctl restart <unité>
|
||||
~~~
|
||||
|
||||
Recharger la configuration d'une unité :
|
||||
|
||||
~~~
|
||||
# systemctl reload unit
|
||||
# systemctl reload <unité>
|
||||
~~~
|
||||
|
||||
Afficher le status d'une unité :
|
||||
Afficher le statut d'une unité :
|
||||
|
||||
~~~
|
||||
# systemctl status unit
|
||||
# systemctl status <unité>
|
||||
# systemctl status <unité> -l
|
||||
~~~
|
||||
|
||||
Savoir si une unité est activée ou non :
|
||||
|
||||
~~~
|
||||
# systemctl is-enabled unit
|
||||
# systemctl is-enabled <unité>
|
||||
~~~
|
||||
|
||||
> **Note** : Attention, si l'unité est en fait un script d'init dans `/etc/init.d/`, `is-enabled` ne fonctionne pas.
|
||||
|
@ -90,31 +86,31 @@ Savoir si une unité est activée ou non :
|
|||
Activer une unité au boot :
|
||||
|
||||
~~~
|
||||
# systemctl enable unit
|
||||
# systemctl enable <unité>
|
||||
~~~
|
||||
|
||||
Désactiver une unité au boot :
|
||||
|
||||
~~~
|
||||
# systemctl disable unit
|
||||
# systemctl disable <unité>
|
||||
~~~
|
||||
|
||||
Masquer une unité, rendant impossible tout stop/start/… :
|
||||
|
||||
~~~
|
||||
# systemctl mask unit
|
||||
# systemctl mask <unité>
|
||||
~~~
|
||||
|
||||
Démasquer une unité :
|
||||
|
||||
~~~
|
||||
# systemctl unmask unit
|
||||
# systemctl unmask <unité>
|
||||
~~~
|
||||
|
||||
Afficher la man page correspondante au service de l'unité :
|
||||
|
||||
~~~
|
||||
# systemctl help unit
|
||||
# systemctl help <unité>
|
||||
~~~
|
||||
|
||||
Recharger systemd pour prendre en compte les unités modifiées :
|
||||
|
@ -122,7 +118,8 @@ Recharger systemd pour prendre en compte les unités modifiées :
|
|||
~~~
|
||||
# systemctl daemon-reload
|
||||
~~~
|
||||
|
||||
|
||||
|
||||
## Gestion de l'alimentation
|
||||
|
||||
Éteindre et redémarrer la machine :
|
||||
|
@ -138,13 +135,11 @@ Recharger systemd pour prendre en compte les unités modifiées :
|
|||
~~~
|
||||
|
||||
|
||||
##### TODO
|
||||
# Écriture des unités
|
||||
|
||||
journald ? Autre page… ?
|
||||
<https://www.freedesktop.org/software/systemd/man/systemd.service.html>
|
||||
|
||||
#### TODO
|
||||
|
||||
# Modifier une unité système
|
||||
## Modifier une unité
|
||||
|
||||
~~~
|
||||
# cp -a /lib/systemd/system/<service>.service /etc/systemd/system/
|
||||
|
@ -174,10 +169,11 @@ 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é
|
||||
|
||||
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 :
|
||||
Exemple avec l'unité de _varnish_ :
|
||||
|
||||
Dossier `/etc/systemd/system/varnish.service.d`, fichier `/etc/systemd/system/varnish.service.d/varnish.service` :
|
||||
|
||||
|
@ -189,7 +185,7 @@ ExecReload=/etc/varnish/reload-vcl.sh
|
|||
|
||||
# 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. Par exemple pour redis via `/etc/systemd/system/redis@.service`.
|
||||
On peut créer/utiliser des templates d'unités. Cela permet de gérer à la volée des instances de services. Par exemple pour _redis_ via `/etc/systemd/system/redis@.service`.
|
||||
|
||||
~~~
|
||||
[Unit]
|
||||
|
@ -216,17 +212,31 @@ On pourra ensuite démarrer l'instance foo et bar avec :
|
|||
# systemctl start redis@foo redis@bar
|
||||
~~~
|
||||
|
||||
|
||||
# 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).
|
||||
Dans un premier temps il faut s'assurer d'avoir le paquet `libpam-systemd` installé. Ensuite si l'on veut que l'utilisateur `foo` ait toujours une session ouverte (pour faire tourner un service) il faut utiliser loginctl :
|
||||
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 :
|
||||
|
||||
~~~
|
||||
$ systemctl --user status
|
||||
● bar
|
||||
State: running
|
||||
Jobs: 0 queued
|
||||
Failed: 0 units
|
||||
Since: ven. 2016-12-23 21:15:33 CET; 1 weeks 6 days ago
|
||||
CGroup: /user.slice/user-1001.slice/user@1001.service
|
||||
├─1758 /lib/systemd/systemd --user
|
||||
└─1760 (sd-pam)
|
||||
~~~
|
||||
|
||||
Attention, si l'on veut une session permanente pour un utilisateur, il faut l'activer avec `loginctl` (si l'on ne fait pas cela, les services lancés via `systemctl --user` seront coupés à la déconnexion). Par exemple pour l'utilisateur _foo_ :
|
||||
|
||||
~~~
|
||||
# loginctl enable-linger foo
|
||||
~~~
|
||||
|
||||
De cette façon systemd tournera toujours même si l'utilisateur n'est pas connecté.
|
||||
Exemple d'unité utilisateur pour tomcat :
|
||||
Exemple d'unité utilisateur pour _Tomcat_ :
|
||||
|
||||
`/etc/systemd/user/tomcat.service`
|
||||
|
||||
|
@ -249,7 +259,7 @@ Type=forking
|
|||
WantedBy=default.target
|
||||
~~~
|
||||
|
||||
L'utilisateur pourra gérer lui-même le service.
|
||||
L'utilisateur pourra ainsi gérer lui-même le service :
|
||||
|
||||
~~~
|
||||
$ systemctl --user enable tomcat
|
||||
|
@ -259,7 +269,7 @@ $ systemctl --user restart tomcat
|
|||
$ systemctl --user stop tomcat
|
||||
~~~
|
||||
|
||||
Pour pouvoir gérer `systemctl --user` via `sudo -iu foo`, il est conseillé de mettre ceci dans `/etc/profile.d/systemd.sh` :
|
||||
*Note* : pour pouvoir gérer `systemctl --user` via `sudo -iu foo`, on conseille de mettre dans `/etc/profile.d/systemd.sh` :
|
||||
|
||||
~~~
|
||||
export XDG_RUNTIME_DIR="/run/user/$UID"
|
||||
|
@ -267,7 +277,7 @@ export XDG_RUNTIME_DIR="/run/user/$UID"
|
|||
|
||||
# Utilisation avancée
|
||||
|
||||
## Débug
|
||||
## Debug
|
||||
|
||||
Afficher plein d'informations sur l'unité :
|
||||
|
||||
|
@ -275,7 +285,7 @@ Afficher plein d'informations sur l'unité :
|
|||
# systemctl show <service>
|
||||
~~~
|
||||
|
||||
Débug au démarrage accessible sur tty9 :
|
||||
_Debug_ au démarrage accessible sur _tty9_ :
|
||||
|
||||
~~~
|
||||
# systemctl enable debug-shell
|
||||
|
@ -312,6 +322,7 @@ sysvinit-core
|
|||
|
||||
Vérifier que GRUB ne se lance pas avec l'option `init=/lib/sysvinit/init`.
|
||||
|
||||
|
||||
# FAQ
|
||||
|
||||
## Bind9
|
||||
|
@ -320,7 +331,7 @@ Sous Debian 8, l'unité par défaut ne gère par les options dans `/etc/default/
|
|||
|
||||
Voir <http://trac.evolix.net/infogerance/wiki/HowtoDebian/MigrationWheezyJessie#Bind>
|
||||
|
||||
## strace Apache (TODO)
|
||||
## strace Apache impossible
|
||||
|
||||
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…
|
||||
|
@ -336,7 +347,9 @@ Astuces « bourrin » : ajouter `exit 0` dans `/etc/init.d/networking` et voir
|
|||
|
||||
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
|
||||
## systemd-fsck : Dependency failed
|
||||
|
||||
Vous obtenez _systemd-fsck : Dependency failed for File System Check on /dev/disk/foo_ ?
|
||||
|
||||
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 :
|
||||
|
||||
|
@ -356,3 +369,7 @@ 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** ne prend aucune majuscule. Ce n'est pas SystemD ou systemD.
|
Loading…
Reference in New Issue