如何制作每 2 天运行一次的 systemd 计时器?

如何制作每 2 天运行一次的 systemd 计时器?

我正在寻找指南来了解 OnCalendar 的工作原理。我不明白......请问如何让 systemd 计时器每 2 天运行一次?

[Unit]
Description=systemd every 2 days.

[Timer]
OnCalendar=*-*-* 00:00:00
Persistent=true
Unit=personal.service

[Install]
WantedBy=timers.target

答案1

系统时间(7)

这告诉我们的每日报表是:

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

第三个代表*该月的哪一天。所以:

OnCalendar=*-*-01 00:00:00

意思是每个月的第一天。 “每两天”一词需要一个起点,否则就会含糊不清。可以是自系统启动以来每两天一次,也可以是自 2020 年 1 月 1 日以来的每个偶数日,或者自纪元以来的每个奇数日,等等。今天是偶数日还是奇数日?定义您想要安排事情的具体日期要容易得多。

这会起作用:

OnCalendar=*-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 00:00:00

这表示它将在每月的每个奇数日运行,这非常接近您每天两次的要求。


如果只是自启动以来,那么这应该有效:

OnBootSec=2d

但是,如果您重新启动,则计划将重置,并且在接下来的两天内不会触发。


您可以在 中查看 和其他选项OnBootSec=的详细信息OnCalendarSec=systemd.定时器(5)


您可以使用 测试其他形式systemd-analyze calendar <expr>。这将为您提供一些有关您的表情的信息,而无需编辑计时器并尝试启用它。

例子:

$ systemd-analyze calendar *-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31 00:00:00
  Original form: *-*-1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31              
Normalized form: *-*-01,03,05,07,09,11,13,15,17,19,21,23,25,27,29,31 00:00:00
    Next elapse: Sun 2021-01-17 00:00:00 CET                                 
       (in UTC): Sat 2021-01-16 23:00:00 UTC                                 
       From now: 1 day 1h left                                               

  Original form: 00:00:00                   
Normalized form: *-*-* 00:00:00             
    Next elapse: Sat 2021-01-16 00:00:00 CET
       (in UTC): Fri 2021-01-15 23:00:00 UTC
       From now: 1h 55min left    

相关内容