编辑1

编辑1

我有一个实时计时器,Persistent=false在启动后立即运行,尽管我的目标是定期运行它!
我发现这是一个相当常见的问题,但我在 StackExchange 中找到的答案都没有解决我的问题。我听从了建议这个帖子这个帖子

在这里我报告一个简化的示例来重现我的问题。我希望计时器每 5 分钟执行一次(0,5,10,15,...55),但不在启动后执行。

我有以下两个文件,使用
sudo systemctl edit --force --full test.service和生成
sudo systemctl edit --force --full test.timer

# test.service
[Unit]
Description=test

[Service]
Type=simple
ExecStart=echo "TEST"

# test.timer
[Unit]
Description=test

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

[Install]
WantedBy=default.target

然后我确保使用以下命令禁用该服务
sudo systemctl disable test.service
并使用以下命令启用计时器:
sudo systemctl enable test.timer

现在,当运行 sudo restart 时,test.service会立即执行。
journalctl -u test好像:

-- Journal begins at Thu 2023-08-24 02:39:59 UTC, ends at Thu 2023-08-24 19:40:14 UTC. --
Aug 24 19:33:02 rbpi0 systemd[1]: Started test.
Aug 24 19:33:02 rbpi0 echo[463]: TEST
Aug 24 19:33:03 rbpi0 systemd[1]: test.service: Succeeded.
Aug 24 19:35:14 rbpi0 systemd[1]: Started test.
Aug 24 19:35:14 rbpi0 echo[911]: TEST
Aug 24 19:35:14 rbpi0 systemd[1]: test.service: Succeeded.
Aug 24 19:40:14 rbpi0 systemd[1]: Started test.
Aug 24 19:40:14 rbpi0 echo[1352]: TEST
Aug 24 19:40:14 rbpi0 systemd[1]: test.service: Succeeded.

并且您可以清楚地看到test.service已在19:33启动时执行...

有人知道错误可能出在哪里吗?

编辑1

我尝试更改该[Install]部分:

  • 尝试 1:完全删除该[Install]部分。
    结果:
The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
Alias= settings in the [Install] section, and DefaultInstance= for template units). 
This means they are not meant to be enabled using systemctl.
  • 尝试 2:更改WantedBy=default.targetWantedBy=timer.targetWantedBy=multi-user.target
    结果:同样的问题。

编辑2

通过阅读定时器手册页我注意到我需要确保系统时钟之前已同步time-sync.target。我确保时钟已同步,但问题仍然存在。

答案1

  1. 计时器单元应该WantedBy=timer.target在其[Install]部分中。

  2. 如果您希望它在启动顺序中的特定点启动,您应该在计时器和/或服务单元中添加类似Before=和/或After=等的指令。[Unit]

  3. 不确定在这种情况下“实时”和“周期性”的区别是什么意思,因为计时器单位实际上都是使OnCalendar=它们“周期性”的地方。

  4. *:0/5表示每 5 分钟激活一次,没有具体的启动时间,因此启动后会尽快启动,请参阅输出systemd-analyze calendar --iterations=10 '*:0/5'

答案2

尤里卡!

问题是我没有正确初始化时间。

是的,我关注了这个帖子但我使用了一个包含命令的脚本/sbin/hwclock --hctosys --utc --noadjfile,及时延迟了它。这让启动顺序开始已经与条目造成混乱OnCalendar=(如定时器手册页)。

我足以添加一项服务完全一样,无需更改任何其他内容。

相关内容