每15分钟使用systemd计时器


33

我正在尝试使systemd计时器每15分钟运行一次。现在我有:

  • timer-fifteen.timer

    [Unit]
    Description=15min timer
    
    [Timer]
    OnBootSec=0min
    OnCalendar=*:*:0,15,30,45
    Unit=timer-fifteen.target
    
    [Install]
    WantedBy=basic.target  
    
  • timer-fifteen.target

    [Unit]
    Description=15min Timer Target
    StopWhenUnneeded=yes
    

这一次又一次地不停地运行。是否需要*:0,15,30,45:*代替?我该如何进行这项工作?


2
您的语法不是每15 秒一次吗?
PavelŠimerda'04

Answers:


43

您的语法转换为每15 秒一次,如果您希望每15 分钟一次,则IMO最可读的方式是:

OnCalendar=*:0/15

与您在问题中使用的最相似的答案是:

OnCalendar=*:0,15,30,45

更多信息:


3
OnCalendar=0/8:00:00说“每8小时运行一次”是否正确?
shackra 2015年

4
是。但是您现在可能已经知道了。:)
PavelŠimerda'16

我没有,但是我还是用了,哈哈。感谢您的确认!
shackra

OnCalendar=*:0/15应该翻译成OnCalendar=*:0,15,30,45完全一样(假设我在文档中正确阅读了)。每8小时就会实现一次OnUnitActiveSec=8hours
Debilski '16

3
指定间隔时,的输出systemd-analyze可能会派上用场,例如try systemd-analyze calendar *:0/15
塞巴斯蒂安

12

根据systemd.time,设置

OnCalendar=*:0/15

完全翻译为

OnCalendar=*:0,15,30,45

即。它会在一个小时,一刻钟,半点钟和四分之一钟正好全时激活设备。

根据您的服务,这可能并不是您想要的,也并非在所有情况下都需要。

使用systemd可以完成每15分钟运行一次的计时器(例如,以1:02、1:17、1:32、1:47、2:02…)运行-始终取决于上次运行的时间。计时器设定

OnUnitActiveSec=15min

现在,您还希望该设备在引导后启动一段时间(除非您想要手动激活该设备或具有执行此操作的依赖项),因此您应该指定

OnBootSec=10min
OnUnitActiveSec=15min

使设备在启动后10分钟启动,然后在首次启动后每15分钟启动一次。

此外,还有OnUnitInactiveSec一项设置可以开始对服务停止(或更一般而言,设备已停用)之后的时间进行计数。


1
警告:OnUnitActiveSec 似乎已经坏了
安德斯·卡塞格
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.