Outils pour utilisateurs

Outils du site


systemd

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
systemd [2017/10/15 18:59] lucsystemd [2025/01/07 20:19] (Version actuelle) luc
Ligne 1: Ligne 1:
 +====== 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 :
 +<code>
 +systemctl enable systemd-networkd
 +# parfois on peut préciser :
 +systemctl enable systemd-networkd.service
 +</code>
 +
 +Pour empecher un service de se lancer au démarrage :
 +<code>
 +systemctl disable gdm
 +</code>
 +
 +Pour savoir si un service est lancé et si il se lance au démarrage :
 +<code>
 +systemctl status gdm
 +</code>
 +
 +===== 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''
 +<code ini>
 +[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
 +</code>
 +
 +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'' :
 +
 +<code ini>
 +[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
 +</code>
 +
 +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.
 +
 +<code ini>
 +[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
 +</code>
 +
 +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/'' :
 +
 +<code ini>
 +[Unit]
 +Description=Nextcloud Sync Slice
 +DefaultDependencies=no
 +Before=slices.target
 +
 +[Slice]
 +CPUQuota=30%
 +MemoryMax=2G
 +</code>
 +
 +Ne pas oublier d'y faire mention dans le fichier nextcloud-sync.service !