![如何在没有桌面会话的情况下使用 Systemd 用户服务](https://linux22.com/image/208908/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%B2%A1%E6%9C%89%E6%A1%8C%E9%9D%A2%E4%BC%9A%E8%AF%9D%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%E4%BD%BF%E7%94%A8%20Systemd%20%E7%94%A8%E6%88%B7%E6%9C%8D%E5%8A%A1.png)
我正在尝试设置需要一直运行的用户级服务(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