使用 Cron 重新启动 systemd 用户服务

使用 Cron 重新启动 systemd 用户服务

我在 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 中修复了该问题

相关内容