我正在尝试让用户服务在启动时启动。
适用于 Linux 上的 Tableau(Ubuntu 19.04 服务器,无 gui)
Tableau 创建一个非管理员用户来运行其服务。并创建一个 systemd 服务
/etc/systemd/system/[email protected]
这里是
[Unit]
Description=User Manager for UID %i
After=systemd-user-sessions.service
[Service]
LimitNOFILE=131072
LimitNPROC=32768
User=%i
PAMName=systemd-user
Type=notify
PermissionsStartOnly=true
ExecStartPre=/bin/loginctl enable-linger %i
ExecStart=/lib/systemd/systemd --user
Slice=user-%i.slice
KillMode=mixed
Delegate=yes
TasksMax=infinity
Restart=always
RestartSec=15
[Install]
WantedBy=default.target
如果我只是重新启动主机并以不相关的用户身份登录,然后检查我发现问题显然与运行有关systemctl status [email protected]
systemd --user
如果我sudo su - tableau
自己尝试一下,它要么抱怨没有/run/user/$(id -u)
目录,要么 $XDG_RUNTIME_DIR 未定义,要么它无法切片(我忘记了哪个,现在无法重新启动产品服务器来再次检查)
journalctl -xe
揭示更多细节
因此,pam_systemd 无法查看/列出/run/user/ID
,因此它不会设置$XDG_RUNTIME_DIR
为systemd --user
运行,因为 tableau 很生气,这会导致user@997
服务失败。
如果我在控制台上登录到“tableau”用户(ID 997),甚至通过 SSH 登录,它似乎会创建一个“登录”会话,并且/run/user/997
整个事情会继续进行,一切正常填写并开始。之后,一旦/run/user/997
创建并且服务尝试加载一次,则保持良好enable-linger
状态user@997
,我可以毫无问题地注销,并且一切都保持正常运行,正如它应该的那样。
我的观点是,据我从文档中看到(大概是从 Tableau 的经验来看,因为他们的 init 进程默认设置了这一点)User=997 ; PAMName=systemd-user
应该 正在工作。和应该通过 systemd 生成一个 uid 997/tableau 的进程,但无论出于何种原因,这都没有定义该/run/user/997
区域
一旦找到目录/run/user/997
,它就会快速加载服务,然后 tableau 就开始启动其内部初始化过程