Tengo un problema con este archivo de servicio systemd (acortado):
[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
Deja que FOOd sea el nombre de usuario y FOOd el nombre del grupo, que ya existe para mi demonio /usr/local/bin/FOOd
.
Necesito crear el directorio /var/run/FOOd/
antes de comenzar el proceso de demonio a /usr/local/bin/FOOd
través de # systemctl start FOOd.service
. Esto falla porque mkdir no puede crear el directorio debido a permisos:
...
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
...
¿Por qué falla mkdir en ExecStartPre y cómo puedo solucionarlo? (Y no, no puedo usar sudo para mkdir ...)
permissions
systemd
Mate
fuente
fuente
Respuestas:
Necesitas agregar
a
[Service]
.FOOd
Por supuesto, su usuario no está autorizado para crear un directorio en/var/run
. Para citar la página del manual:fuente
ExecReload=
ejecuten con privilegios de root. Esto puede no ser lo que quieres.PermissionsStartOnly
fue desaprobado. Referencia: github.com/NixOS/nixpkgs/issues/53852 ¿Cómo hacer eso ahora?+
inmediatamente despuésExecStartPre=
. Por ejemploExecStartPre=+/bin/mkdir test
Esta no es una respuesta que explique o solucione el problema de permisos, pero creo que debería usar la opción systemds RuntimeDirectory. Citando la página del manual :
Entonces, todo lo que tendría que hacer es cambiar su archivo de servicio a:
fuente
Agregue
+
antes del comando que desea ejecutar con todos los privilegios.Por ejemplo:
Consulte la sección sobre "Prefijos ejecutables especiales" en https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=
fuente