我有一个以 root 身份运行的服务:
[Unit]
Description=my service
After=docker.service network-online.target
Requires=docker.service network-online.target
[Service]
TimeoutStartSec=0
RestartSec=60
Restart=always
User=root
Group=root
ExecStart=/usr/bin/myservice
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
我遇到了一些意想不到的行为:
当我查看导致失败的环境变量时,环境变量$HOME被设置为。/rootmyservice
但是,作为 root 用户,我得到:
$ echo $HOME
/home/root
Run Code Online (Sandbox Code Playgroud)
这与我所看到的一致/etc/passwd
root:x:0:0:root:/home/root:/bin/sh
Run Code Online (Sandbox Code Playgroud)
当我myservice手动运行时,它会获取正确的$HOME环境变量并且可以工作。
我愿意$HOME成为/home/root,但不是/root。所以...
systemd获取/root,为什么会$HOME被覆盖?systemd除了$HOME在服务文件中显式设置环境变量之外,如何防止在全局范围内执行此操作?<-- 在查看源代码后,这似乎不会产生影响