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
comments powered by Disqus