systemd:mkdirとExecStartPreの権限の問題

systemd:mkdirとExecStartPreの権限の問題

この(短縮された)systemdサービスファイルに問題があります。

[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

許す食べ物ユーザー名はですフー私のデーモンにすでに存在するグループ名/usr/local/bin/FOOd

/var/run/FOOd/デーモンを起動する前にディレクトリを作成する必要があります。 mkdir が特権のためにディレクトリを作成できないため、失敗します。/usr/local/bin/FOOd# systemctl start FOOd.service

...
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
...

ExecStartPreでmkdirが失敗する理由と回避策は何ですか? (いいえ、sudoを使用してmkdirを実行することはできません...)

ベストアンサー1

あなたは追加する必要があります

PermissionsStartOnly=true

到着する[Service]。あなたのユーザーは間違いなく..のマニュアルページを参照するFOOd権限がありません。/var/run

ブールパラメータを使用します。 true の場合、User= と同様のオプション (詳細は systemd.exec(5) を参照) で構成される権限関連の実行オプションは ExecStart= で始まるプロセスにのみ適用され、他のさまざまな ExecStartPre=、ExecStartPost=、ExecReload=、ExecStop= に適用ではありません。およびExecStopPost =コマンド。 falseの場合、設定されたすべてのコマンドに同じ方法で設定が適用されます。デフォルトは偽です。

おすすめ記事