systemd.timer 支持到 ns

7 min read

示例

通过定时器预定执行的服务文件一般无需任何修改。以下示例将预定执行 foo.service,因此它的定时器应该被命名为 foo.timer

单调定时器

定义一个在系统启动 15 分钟后执行,且之后每周都执行一次的定时器:

/etc/systemd/system/foo.timer
[Unit]
Description=Run foo weekly and on boot

[Timer]
OnBootSec=15min
OnUnitActiveSec=1w 

[Install]
WantedBy=timers.target

实时定时器

定义一个每周执行一次(具体来讲,指周一凌晨零点)的定时器。如果上次未执行(比如说系统当时没有开机,这个行为由 Persistent=true 定义)就立即执行服务。

/etc/systemd/system/foo.timer
[Unit]
Description=Run foo weekly

[Timer]
OnCalendar=weekly
Persistent=true

[Install]
WantedBy=timers.target

更精确的时间可以通过 OnCalendar 参数以下列方式指定:

星期 年-月-日 时:分:秒

可以用星号来表示任意值,用逗号分列可能值。以 .. 分隔的两个值指两个值间的连续序列。

这是在每个月的前四天晚上中午 12 点,但仅当这一天是周一和周四时运行的例子:

OnCalendar=Mon,Tue *-*-01..04 12:00:00

在每个月的第一个星期六运行:

 OnCalendar=Sat *-*-1..7 18:00:00

如果不需要以星期几来界定,比如说在每天四点运行,请去掉星期项:

 OnCalendar=*-*-* 4:00:00

在不同的时间运行一个服务可以以多次指定 OnCalendar 的方式表示。在下面的例子中,这个服务在周内的 22:30 和周末的 20:00 运行:

 OnCalendar=Mon..Fri 22:30
 OnCalendar=Sat,Sun 20:00