我有以下服务文件:
[Unit]
Description=P
Requires=network.target
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=1
TimeoutStartSec=1s
WorkingDirectory=/home/ubuntu/R/bp/
ExecStart=/usr/bin/node server.js
User=ubuntu
StandardOutput=file:/home/ubuntu/R/bp/p.out
StandardError=file:/home/ubuntu/R/bp/p.out
[Install]
WantedBy=multi-user.target
当我启动该服务时,它以 ubuntu 身份运行。
但是它写入的文件归 root 所有。
-rw-r--r-- 1 root root 9217 Mar 5 16:14 p.out
我希望该文件归 ubuntu 用户所有。
我的ubuntu版本是18.04.3
答案1
我通过将这些行添加到服务文件来让它做我想做的事情。这可能不是一个好的解决方案,但我真的需要让它工作。
ExecStartPre=/bin/rm -fr /home/ubuntu/R/bp/p.out
ExecStartPost=/usr/bin/sudo /bin/chown ubuntu:ubuntu /home/ubuntu/R/bp/p.out
答案2
我会用另一种方式来实现。您的服务应该以普通用户身份运行吗?
将 systemd.service 放在 /etc/systemd/user/ 中
然后你可以使用
systemctl --user enable your.service
那么你可以保留这些部件。
ExecStartPre=/bin/rm -fr /home/ubuntu/R/bp/p.out
ExecStartPost=/usr/bin/sudo /bin/chown ubuntu:ubuntu /home/ubuntu/R/bp/p.out