J'ai un problème avec ce fichier de service Systemd (raccourci):
[Unit]
Description=control FOO daemon
After=syslog.target network.target
[Service]
Type=forking
User=FOOd
Group=FOO
ExecStartPre=/bin/mkdir -p /var/run/FOOd/
ExecStartPre=/bin/chown -R FOOd:FOO /var/run/FOOd/
ExecStart=/usr/local/bin/FOOd -P /var/run/FOOd/FOOd.pid
PIDFile=/var/run/FOOd/FOOd.pid
[Install]
WantedBy=multi-user.target
Soit FOOd le nom d'utilisateur et FOO le nom du groupe, qui existe déjà pour mon démon /usr/local/bin/FOOd
.
Je dois créer le répertoire /var/run/FOOd/
avant de lancer le processus démon /usr/local/bin/FOOd
via # systemctl start FOOd.service
. Cela échoue, car mkdir ne peut pas créer le répertoire en raison d'autorisations:
...
Jun 03 16:18:49 PC0515546 mkdir[2469]: /bin/mkdir: cannot create directory /var/run/FOOd/: permission denied
Jun 03 16:18:49 PC0515546 systemd[1]: FOOd.service: control process exited, code=exited status=1
...
Pourquoi mkdir échoue-t-il dans ExecStartPre et comment puis-je résoudre ce problème? (Et non, je ne peux pas utiliser sudo pour mkdir ...)
Réponses:
Vous devez ajouter
à
[Service]
. Votre utilisateurFOOd
n'est bien sûr pas autorisé à créer un répertoire dans/var/run
. Pour citer la page de manuel:la source
ExecReload=
exécuter des commandes dans le privilège root. Cela peut ne pas être ce que vous voulez.PermissionsStartOnly
était obsolète. Référence: github.com/NixOS/nixpkgs/issues/53852 Comment faire cela maintenant?+
immédiatement aprèsExecStartPre=
. Par exempleExecStartPre=+/bin/mkdir test
Ce n'est pas une réponse qui explique ou résout le problème d'autorisation, mais je pense que vous devriez simplement utiliser l'option systemds RuntimeDirectory. Citation de la page de manuel :
Il vous suffit donc de modifier votre fichier de service pour:
la source
Ajoutez
+
avant la commande que vous souhaitez exécuter avec tous les privilèges.Par exemple:
Voir la section "Préfixes spéciaux pour les exécutables" à l' adresse https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=.
la source