systemd 服务正在以 root 身份写入文件,进程以 ubuntu 身份运行

systemd 服务正在以 root 身份写入文件,进程以 ubuntu 身份运行

我有以下服务文件:

[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

相关内容