Estou com um problema com este arquivo de serviço systemd (reduzido):
[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
Seja FOOd o nome de usuário e FOO o nome do grupo, que já existe para o meu daemon /usr/local/bin/FOOd
.
Preciso criar o diretório /var/run/FOOd/
antes de iniciar o processo daemon /usr/local/bin/FOOd
via # systemctl start FOOd.service
. Isso falha, porque o mkdir não pode criar o diretório devido às permissões:
...
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 que o mkdir falha no ExecStartPre e como posso corrigi-lo? (E não, não posso usar o sudo para mkdir ...)
permissions
systemd
Matt
fonte
fonte
Respostas:
Você precisa adicionar
para
[Service]
.FOOd
É claro que seu usuário não está autorizado a criar um diretório no/var/run
. Para citar a página de manual:fonte
ExecReload=
executados com privilégios de root. Pode não ser o que você deseja.PermissionsStartOnly
foi preterido. Referência: github.com/NixOS/nixpkgs/issues/53852 Como fazer isso agora?+
imediatamente depoisExecStartPre=
. Por exemploExecStartPre=+/bin/mkdir test
Esta não é uma resposta que explique ou corrija o problema de permissão, mas acho que você deve usar a opção systemds RuntimeDirectory. Citando a página de manual :
Então, tudo que você precisa fazer é alterar seu arquivo de serviço para:
fonte
Adicionar
+
antes do comando que você deseja executar com privilégios totais.Por exemplo:
Consulte a seção "Prefixos especiais executáveis" em https://www.freedesktop.org/software/systemd/man/systemd.service.html#ExecStart=
fonte