Ce billet décrit comment créer un service utilisateur simple avec SystemD afin qu’il soit automatiquement lancé au démarrage du système d’exploitation.
SystemD permet de gérer le lancement de services à un niveau système ou à un niveau utilisateur.
Recourir à des services utilisateurs est préférable pour le système. Cela nécessite moins de droits, permet de regrouper la configuration d’une application dans le répertoire de son utilisateur etc.
Bien qu’il puisse servir dans d’autres cas, le service décrit ici a été conçu avec les points suivants en tête :
Le service utilisateur que nous allons mettre en place sert à lancer un exécutable au démarrage du système.
Les fichiers de service de SystemD portent tous l’extension .service
. Dans le cas de notre application, le fichier s’appelle pad.service
.
Il doit être enregistré dans l’arborescence suivante :
[Unit]
Description=Zigazou's pad
[Service]
Type=simple
ExecStart=/home/pad/application/pad
WorkingDirectory=/home/pad/application
Environment=YESOD_APPROOT=pad.zigazou.dev
Restart=on-failure
[Install]
WantedBy=sockets.target
Quelques explications :
pad
se trouve dans le répertoire application
de l’utilisateur pad
. Il s’agit d’un utilisateur classique mais dédié à l’application.YESOD_APPROOT
est positionnée à la valeur pad.zigazou.dev
car notre application a été développée avec le framework Yesod en Haskell et qu’elle se trouve derrière un reverse-proxy.Les commandes ci-dessous sont nécessaires pour installer et démarrer notre service :
sudo loginctl enable-linger pad
systemctl daemon-reload --user
systemctl start pad --user
systemctl enable pad --user
~/.config/systemd/user
afin qu’il puisse découvrir notre service.--user
car elle indique à SystemD de travailler au niveau utilisateur. Sans elle, SystemD cherche à travailler au niveau système par défaut, ce qu’il ne peut faire sans droit d’administration.