Gestion d'un service systemd avec un utilisateur simple
systemd
permet la gestion des services en étant administrateur mais également avec un utilisateur simple. Voyons un exemple d'utilisation.
Le user
doit être linger
ce qui permet au service de continuer après la déconnexion.
Il faut cependant les droits admin pour cette commande uniquement.
1sudo loginctl enable-linger gus
Script $HOME/coucou.sh
:
1#!/usr/bin/env bash
2
3while true
4do
5 echo "$(date) coucou $1"
6 sleep 1
7done
Ce simple script fait un coucou horodaté personalisé, un peu pété mais suffisant pour notre exemple.
Service $HOME/.config/systemd/user/coucou@.service
1[Unit]
2Description=coucou %I
3
4[Service]
5Type=simple
6Restart=always
7RestartSec=10
8ExecStart=/bin/bash -c '$HOME/coucou.sh %i >> $HOME/coucou-%i.log 2>&1'
9
10[Install]
11WantedBy=default.target
Remplacer $HOME
par votre vrai chemin, je n'ai pas testé si la variable d'environnement $HOME
marche.
Le service prend un paramètre, d'où le nommage de fichier avec un @
et l'utilisation des expressions %I
et %i
à l'intérieur du service.
Pour la prise en compte de ce script :
1systemctl --user daemon-reload
Utilisation
Activons le script au boot + immédiatement
1systemctl --user enable --now coucou@gus
on doit voir grossir le fichier $HOME/coucou-gus.log
1sam. 15 oct. 2022 11:42:28 CEST coucou gus
2sam. 15 oct. 2022 11:42:29 CEST coucou gus
3sam. 15 oct. 2022 11:42:30 CEST coucou gus
4sam. 15 oct. 2022 11:42:31 CEST coucou gus
5sam. 15 oct. 2022 11:42:32 CEST coucou gus
Se déloguer + se reloguer pour vérifier que le service tourne toujours.
Checker le status
:
1$ systemctl --user status coucou@gus
2● coucou@gus.service - coucou gus
3 Loaded: loaded (/home/gus/.config/systemd/user/coucou@.service; disabled; vendor preset: enabled)
4 Active: active (running) since Sat 2022-10-15 11:44:42 CEST; 47s ago
5 Main PID: 1794857 (bash)
6 Memory: 1.9M
7 CPU: 481ms
8 CGroup: /user.slice/user-1001.slice/user@1001.service/app.slice/app-coucou.slice/coucou@gus.service
9 ├─1794857 /bin/bash -c /home/gus/coucou.sh gus >> /home/gus/coucou-gus.log 2>&1
10 ├─1794858 bash /home/gus/coucou.sh gus
11 └─1795083 sleep 1
Enfin pour désactiver ce service immédiatement + au boot
1systemctl --user disable --now coucou@gus