我在 Raspbian Jessie 上用 Systemd 设置了一个 node.js 应用程序形式的服务,它使用自己的用户帐户。但是,我发现该服务无法正常运行,因为它没有必要的权限。我安装的一个节点模块需要 root 访问权限。如果我使用 sudo 手动运行该应用程序,一切都会正常进行。
有没有办法告诉 systemd 使用 sudo 运行该服务?
答案1
sudo
告诉 systemd 使用?来运行服务
sudo
与此无关。
通常,您可以使用单元文件部分中的User=
andGroup=
指令指示 systemd 以特定用户/组的身份运行服务。[Service]
将它们设置为 root(或者删除它们,因为以 root 身份运行是默认设置)。
答案2
需要明确的是,systemd
系统服务默认以 root 身份运行,但是默认行为和使用 运行系统服务之间仍然存在差异User=root
。
正如记录的那样衍生进程中的环境变量User=
,仅当设置了时才会设置这些变量:
$USER, $LOGNAME, $HOME, $SHELL
我进行了测试以确认这一发现。因此,如果您想以 root 身份运行需要上述变量之一的 systemd 服务,则需要设置User=root
。
答案3
这是一个临时的解决方案,但在紧急情况下却能发挥作用:
/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
可以以具有 sudo 权限的用户身份在 systemd 单元文件中运行,如下所示:
[Unit]
Description=Rails Webserver
After=syslog.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/var/www/webserver
ExecStart=/usr/bin/sudo /bin/bash -lc 'bundle exec rails server -e demo -p 80'
Restart=always
KillSignal=SIGQUIT
[Install]
WantedBy=multi-user.target
答案4
在这种情况下,以系统用户身份运行它,默认情况下,服务以 root 身份运行。