使用 Cron 重启 systemd 用户服务

Mag*_*sen 6 cron systemd

我在 systemd 中创建了一个 --user 服务,以便非特权用户可以管理服务。这很好用。我想在一天中的固定给定时间重新启动服务,所以我在用户 crontab 中创建了一个 cron 作业。

奇怪的是这不起作用。如果他们运行,用户可以重新启动服务:

systemctl --user restart myservice.service
Run Code Online (Sandbox Code Playgroud)

但是,从 crontab 运行它不会重新启动服务。有谁知道为什么?

这是在 Ubuntu 16.04 上运行的。

Ste*_*itt 12

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
Run Code Online (Sandbox Code Playgroud)

为此,您可能需要查看 systemd 计时器而不是 cron。