Systemd 定时器不规律

Systemd 定时器不规律

我正在尝试设置一个每 5 秒运行一次的 systemd 计时器(它将向远程服务器发送实时统计数据),如下所述这里

服务

[Unit]
Description=PHP Cron
Wants=network.target
After=network.target

[Service]
Type=oneshot
StandardOutput=null
StandardError=syslog
ExecStart=/bin/sh -c "/usr/bin/date >> /tmp/date"

[Install]
WantedBy=multi-user.target

计时器

[Unit]
Description=Run cron service every 5 seconds

[Timer]
OnCalendar=*:*:0/5

不幸的是,计时器非常不规律。

Fri Dec 29 12:21:21 IST 2017
Fri Dec 29 12:21:25 IST 2017
Fri Dec 29 12:21:33 IST 2017
Fri Dec 29 12:21:36 IST 2017
Fri Dec 29 12:21:41 IST 2017
Fri Dec 29 12:21:48 IST 2017
Fri Dec 29 12:21:52 IST 2017
Fri Dec 29 12:22:01 IST 2017
Fri Dec 29 12:22:07 IST 2017
Fri Dec 29 12:22:13 IST 2017
Fri Dec 29 12:22:23 IST 2017

为什么会这样?当间隔小于一分钟时,systemd 计时器是否不可靠?

答案1

默认情况下,systemd 使用非常低的精度,以便多个计时器的作业(即,不同的任务都在几秒钟内发生)可以分组为一次运行,之后系统可以继续空闲。

该选项可以设置[Timer],您需要将其设置为1s或更低。

    准确度秒=
       指定计时器的精度。默认为 1 分钟。计时器
       计划在从指定的时间开始的时间窗口内完成
       OnCalendar=、OnActiveSec=、OnBootSec=、OnStartupSec=、OnUnitActiveSec= 或
       OnUnitInactiveSec= 并稍后结束使用 AccuracySec= 配置的时间。在
       在这个时间窗口,到期时间将被放置在特定于主机的随机的
       但稳定的位置,在所有本地计时器单元之间同步。这是
       这样做是为了优化功耗,抑制不必要的 CPU 唤醒。
       为了获得最佳精度,请将此选项设置为 1us。请注意,计时器仍然
       受通过 systemd-system.conf(5) 配置的定时器松弛的影响
       TimerSlackNSec= 设置。有关详细信息,请参阅 prctl(2)。为了优化功耗,
       确保将该值设置得尽可能高,并尽可能低。

相关内容