我正在尝试设置需要一直运行的用户级服务(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