我需要为经常关闭的机器编写一个计时器单元(例如经典桌面设置)。该定时器单元需要定期激活,但不是很频繁(例如每周、每月)。
我确实找到了一些方法,但它们都不适合:
根据手册页,如果配置的时间点是过去的OnBootSec,则OnStartupSec只会激活和指令。我还发现了一些使用这些的组合OnActiveSec来定义常规事件的示例。问题是:每次机器启动时,定时器都会激活配置的单元。如果你有一个应该每周/每月运行一次的计时器,那就太频繁了。例如:我不想让我的日志一天轮换三遍!
用OnCalendar指令解决。如果机器在配置的时间点(主要是午夜,因为如果您在时间规范中省略小时,它默认为 00:00:00)断电,则下次启动后将不会激活计时器。至少我是这样得到的。那正确吗?
如果配置的时间已经过去,是否会在下次启动后立即激活带有日历事件的计时器?如果没有,是否有解决方法来获得这种行为?
我使用 systemd 服务单元启动我的窗口管理器(遵循本教程)。在我登录后tty1执行以下操作.zlogin(我使用 ZSH 作为登录 shell):
if [[ -z "$DISPLAY" && $(tty) = /dev/tty1 ]]; then
nohup systemd --user > ~/.xlog 2>&1 &
disown %2
logout
fi
Run Code Online (Sandbox Code Playgroud)
Systemd 通过服务单元启动 X 服务器、窗口管理器等。
当我想注销时,问题就开始了。
我应该简单地执行kill $MANAGERPID杀死 systemd 守护进程吗?
执行 a 似乎更干净,loginctl terminate-session $XDG_SESSION_ID但此命令需要更多权限。
这里的问题是:使用上述设置注销的首选方式是什么?