![如何使用 systemd 在每周星期六启动时运行脚本?](https://linux22.com/image/1601500/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20systemd%20%E5%9C%A8%E6%AF%8F%E5%91%A8%E6%98%9F%E6%9C%9F%E5%85%AD%E5%90%AF%E5%8A%A8%E6%97%B6%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%EF%BC%9F.png)
[Unit]
Description=run test service
[Timer]
OnCalendar=Sat *-*-* 00:00:01
Unit=test.service
Persistent=true
[Install]
WantedBy=timers.target
上面的例子中一切正常。但我必须在上午 10 点之前启动我的 Linux 操作系统。
我的目标是:我想在每个星期六的任何时间启动我的 Debian 10,然后在启动时运行脚本。如果我在星期六(同一天)重启我的 Linux 机器两三次,我不想再次运行脚本,只想运行一次。可以使用 systemd 做到这一点吗?
我的 Gnu-Linux 操作系统是Debian GNU/Linux 10(破坏者)并且 systemctl --version 是systemd 241 (241)
答案1
“Linux 操作系统”太笼统以便能够诊断您的特定系统。请运行以下四个命令并报告结果(如果命令不可用,则包括错误)。报告将告诉您安装了哪种“linux os”以及正在运行哪个版本的 systemd:
lsb_release -a
systemctl --version
/sbin/init --version
busctl --system get-property org.freedesktop.systemd1 \
/org/freedesktop/systemd1 \
org.freedesktop.systemd1.Manager \
Version
在当前(截至 2019 年 8 月)的 systemd 版本上
将实时计时器设置为周六的任何时间触发
OnCalendar=Sat *-*-* 00:00:01
并删除单片定时器
OnBootSec=2
的效果
Persistent=true
系统将尝试每周星期六 00:00:01 后执行一次该脚本。该脚本将只在每个星期六运行一次,并且通常是第一次启动时。如果系统星期六未开机,它将在一周中的任何其他日子运行;如果系统星期五晚上未开机,它将在 00:00:01 运行。
- http://manpages.ubuntu.com/manpages/xenial/man5/systemd.timer.5.html
- https://jlk.fjfi.cvut.cz/arch/manpages/man/systemd.timer.5
持久性=
采用布尔参数。如果为 true,服务单元上次触发的时间将存储在磁盘上。当计时器激活时,如果服务单元在计时器不活动期间至少被触发一次,则立即触发服务单元。这对于在机器关闭时赶上错过的服务运行很有用。请注意,此设置仅对使用 OnCalendar= 配置的计时器有效。默认为 false。