我在 systemd 中创建了一个 --user 服务,以便非特权用户可以管理服务。这效果很好。我想在一天中的固定给定时间重新启动服务,因此我在用户 crontab 中创建了一个 cron 作业。
奇怪的是这不起作用。如果用户运行以下命令,则可以重新启动服务:
systemctl --user restart myservice.service
但是,从 crontab 运行此命令不会重新启动该服务。有谁知道为什么?
它在 Ubuntu 16.04 上运行。
答案1
systemctl --user
需要与 D-Bus 会话对话,这至少涉及DBUS_SESSION_BUS_ADDRESS
设置XDG_RUNTIME_DIR
;通常:
XDG_RUNTIME_DIR=/run/user/$(id -u)
DBUS_SESSION_BUS_ADDRESS=unix:path=${XDG_RUNTIME_DIR}/bus
export DBUS_SESSION_BUS_ADDRESS XDG_RUNTIME_DIR
systemctl --user restart myservice.service
为此,您可能需要查看 systemd 计时器而不是 cron。
答案2
同样的问题。
添加; XDG_RUNTIME_DIR=/run/user/$(id -u) DBUS_SESSION_BUS_ADDRESS=unix:path=${XDG_RUNTIME_DIR}/bus 导出 DBUS_SESSION_BUS_ADDRESS XDG_RUNTIME_DIR
在 Lubuntu 22.04 中修复了该问题