====== 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 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 =====
[[https://www.mauromorales.com/2024/11/08/how-to-sync-a-headless-server-with-your-nextcloud-files/|source]]
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 =====
[[https://www.mauromorales.com/2024/11/08/how-to-sync-a-headless-server-with-your-nextcloud-files/|source]]
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 !