web-dev-qa-db-ja.com

Systemdサービススクリプトがファイルへの書き込みに失敗する

ユーザーベースのサービスが必要です。そこで、[email protected]に次の内容の/etc/systemd/systemを作成しました。

[Unit]
Description=My Service

[Service]
Type=simple
ExecStart=/bin/bash ${HOME}/userscript
WorkingDirectory=${HOME}
Restart=always
RestartSec=2
User=%i

[Install]
WantedBy=multi-user.target

以下は${HOME}/userscriptの内容です

#!/bin/bash
while true;
do
    echo $(date +%Y%m%d%a%H%M%S) >> log
    echo $USER >> log
    sleep 2
done

次に、次を使用してサービスを有効にして開始します。

systemctl enable myservice@john
systemctl start myservice@john

これは、サービスステータスを確認したときに得られるものです。

[email protected] - myservice
   Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-12-11 08:03:54 PST; 6s ago
 Main PID: 11558 (bash)
   CGroup: /system.slice/system-myservice.slice/[email protected]
           ├─11558 /bin/bash /home/john/userscript
           └─11603 sleep 2

Dec 11 08:03:54 my-system-hostname systemd[1]: Started myservice.
Dec 11 08:03:54 my-system-hostname bash[11558]: /home/john/userscript: line 4: log: Permission denied
Dec 11 08:03:54 my-system-hostname bash[11558]: /home/john/userscript: line 5: log: Permission denied
Dec 11 08:03:56 my-system-hostname bash[11558]: /home/john/userscript: line 4: log: Permission denied
Dec 11 08:03:56 my-system-hostname bash[11558]: /home/john/userscript: line 5: log: Permission denied
Dec 11 08:03:58 my-system-hostname bash[11558]: /home/john/userscript: line 4: log: Permission denied
Dec 11 08:03:58 my-system-hostname bash[11558]: /home/john/userscript: line 5: log: Permission denied
Dec 11 08:04:00 my-system-hostname bash[11558]: /home/john/userscript: line 4: log: Permission denied
Dec 11 08:04:00 my-system-hostname bash[11558]: /home/john/userscript: line 5: log: Permission denied

サービスは2秒ごとに日時とユーザー名を書き込む必要がありますが、これは発生せず、代わりにアクセス権エラーが発生します。サービスがjohnとして実行されており、echoedを正しく取得できることを確認しました。ファイルに書き込もうとすると、権限の問題が表示されます。

どんな手掛かり?

更新1

以下はnamei -lx /home/john/logの出力です

$ namei -lx /home/john/log
f: /home/john/log
Drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x john john john
-rw-rw-r-- john john log
2
arxoft

やっと解決しました。値~WorkingDirectoryディレクティブを追加する必要がありました。現在、権限の問題なしで機能します。

@muruに感謝

2
arxoft