如何在没有桌面会话的情况下使用 Systemd 用户服务

如何在没有桌面会话的情况下使用 Systemd 用户服务

我正在尝试设置需要一直运行的用户级服务(Python/Java/Node JS 进程),直到我明确停止为止。该服务需要以非 root 用户身份启动/停止。

我在 ~/.config/systemd/user/ 下创建了服务文件。当我尝试加载时,systemctl --用户守护进程重新加载,它失败并出现以下错误。

$ systemctl --user daemon-reload
Failed to get D-Bus connection: No such file or directory

我知道如果没有桌面会话,D-Bus 将无法运行,但没有桌面会话,它是公司提供的虚拟机之一。我们不为 Linux 服务器启用桌面会话。

$ ps -ef | grep systemd | grep -v grep
root          1      0  0 Jul25 ?        00:01:33 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root        544      1  0 Jul25 ?        00:00:33 /usr/lib/systemd/systemd-journald
root        591      1  0 Jul25 ?        00:00:03 /usr/lib/systemd/systemd-udevd
dbus        783      1  0 Jul25 ?        00:01:21 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
root        857      1  0 Jul25 ?        00:00:34 /usr/lib/systemd/systemd-logind

如何在没有桌面会话的情况下创建用户级服务?

答案1

它只需两个命令即可工作。

cat << 'EOF' >> ~USERNAME/.profile
export XDG_RUNTIME_DIR=/run/user/$(id -u)
EOF
loginctl enable-linger $USERNAME

相关内容