Table des matières
Systemd
Systemd, c'est un sujet polémique. Est-ce que c'est bien, est-ce que c'est pas bien, à quoi ça sert… Je ne rentre pas dedans, de toutes façons j'ai pas le niveau pour apporter un quelconque argument.
Par contre, on le rencontre partout par défaut, donc faut savoir l'utiliser. voilà, ça c'est à ma portée, du moins pour des choses simples :
gérer des services
Pour autoriser des services au démarrage, par exemple systemd-networkd
, il faut taper la commande :
systemctl enable systemd-networkd # parfois on peut préciser : systemctl enable systemd-networkd.service
Pour empecher un service de se lancer au démarrage :
systemctl disable gdm
Pour savoir si un service est lancé et si il se lance au démarrage :
systemctl status gdm
Executer au démarrage
On souhaite executer un programme au démarrage de l'ordinateur et/ou gérer le programme comme un démon (pas de terminal qui traine, pas de screen bien grouik).
Il faut donc créer un fichier super_Nom.service
qu'on pourra mettre dans /etc/systemd/system
[Unit] Description=Gogs (Go Git Service) After=syslog.target After=network.target After=mysqld.service [Service] Type=simple User=git Group=git WorkingDirectory=/path/to/working/dir ExecStart=/absolute/path/to/exec param Restart=always Environment=USER=git HOME=/home/git [Install] WantedBy=null-user.target
Ensuite, un petit systemctl <service> enable
et le tour est joué
Executer en tant qu'user
Ce qu'on a vu jusqu'à présent est à executer en root ou via sudo, pour gérer le système dans sa totalité.
Mais si on souhaite pouvoir démarrer un service au niveau USER, par exemple au démarrage de la session, alors il faut s'intéresser au côté USER de systemd.
Les fichiers de conf (service, timer…) sont dans ~.config/systemd/user/
, exemple pour démarrer un service on crée le fichier nextcloud-sync.service
:
[Unit] Description=Nextcloud Sync [Service] Type=simple ExecStart=COMMANDE AVEC ARGUMENTS TimeoutStartSec=300 Slice=nextcloud-sync.slice (facultatif, appelle un slice pour contrôler les ressources affectées) [Install] WantedBy=default.target
Ensuite, on pilote systemd en mode utiliseateur avec le flag –user
: systemctl –user enable nextcloud-sync.service
, start
, stop
, etc.
Les timers
Pour remplacer les crontab, et executer des scripts à intervalle régulier.
On crée le fichier nextcloud-sync.timer
qu'on met dans /etc/systemd/system
ou dans ~.config/systemd/user/
selon que le timer soit à contrôler par un user ou par root.
[Unit] Description=Run Nextcloud Sync every 5 minutes Requires=nextcloud-sync.service [Timer] Unit=nextcloud-sync.service OnUnitInactiveSec=5m RandomizedDelaySec=5m AccuracySec=1s [Install] WantedBy=timers.target
et on démarre le timer avec systemctl –user enable nextcloud-sync.timer
puis systemctl –user start nextcloud-sync.timer
Les slices
Les slices servent à limiter la conso CPU et mémoire. Il faut créer un fichier config à la syntaxe de systemd, et les faire appeler par un service.
Par exemple faisons un slice pour le service nextcloud-sync.service défini dans le paragraphe “Executer en tant qu'user”. On crée le fichier nextcloud-sync.slice
qu'on place dans ~/.config/systemd/user/
:
[Unit] Description=Nextcloud Sync Slice DefaultDependencies=no Before=slices.target [Slice] CPUQuota=30% MemoryMax=2G
Ne pas oublier d'y faire mention dans le fichier nextcloud-sync.service !