====== 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 !