从 Rails 启动 systemd 用户服务

Start systemd user service from Rails

我需要在 Rails 从 Ruby 启动 systemd 服务。我的 ruby 代码使用反引号调用 systemctl:

`systemctl --user start myservice`

它不起作用,我认为这与执行命令的用户有关。 Rails 在 Passenger 上是 运行,其用户应该与我的服务相同。

我也试过了alternative ways to launch a subprocess

(这应该是评论而不是答案,但我仍在建立 'reputation' 点,所以...)

如果 Passenger 具有与 myservice 和 运行 相同的 UID,那么这不是问题所在。启动 child 的其他方式也不太可能改变结果。

我建议捕获子进程的输出如下: systemctl --user start myservice > /tmp/systemctl.output 2>&1 然后在子进程失败后检查输出文件。

我通过告诉 shell 在哪里可以为用户找到正确的 DBUS 来解决问题。我将环境变量 XDG_RUNTIME_DIR 设置为用户的 DBUS 位置,在我的例子中为 1001。检查 echo $UID 以查找用户 ID,我无法使用此内联。

`export XDG_RUNTIME_DIR="/run/user/1001" && systemctl --user start myservice`

感谢D.j。 Molny 的首字母 post 和 NeilCasey 的 the remainder