即使尚未满足 OnCalendar 标准,systemctl start foo.timer 也会启动 foo.service

即使尚未满足 OnCalendar 标准,systemctl start foo.timer 也会启动 foo.service

所以我有我的服务单元(运行一些节点代码)和我的计时器单元服务:

[Unit]
Description=foo

[Service]
Type=oneshot
ExecStart=/home/ubuntu/services/foo/start.sh

定时器

[Unit]
Description=foo timer 

[Timer]
OnBootSec=0min
OnCalendar=*-*-* 05:01:00 UTC 
Unit=foo.service 

[Install]
WantedBy=multi-user.target

据我了解systemctl start foo.timer,将启动计时器单元但不会立即启动服务单元(无需重新启动),并且systemctl enable foo.timer 不会启动计时器单元但会在系统启动时启动它。

我想立即启动计时器,所以我使用了前者。它确实启动了计时器,但它也启动了我,foo.service因为我启动了计时器,即使条件OnCalendar不满足。当时它也仍然正确启动OnCalendar(我正在测试,所以我选择了不久的将来的时间)。

我想知道我的单元文件中是否有任何内容导致此问题。我认为启动计时器不会启动服务,而只会在满足计时器中的条件时才启动服务。

我也测试了这种system enable方式,并且确实表现得正确。我启用了我的foo.timer.重新启动系统。计时器处于活动状态,但服务并未立即提供。时间一OnCondition到,服务就开始了。

答案1

systemd.timer(5):

如果在定时器单元激活时配置了定时器OnBootSec=OnStartupSec=已经过去,则定时器将立即到期并启动配置的单元。其他指令中定义的计时器的情况并非如此。

由于您的计时器单元设置了OnBootSec=0min,因此它总是会立即启动服务单元。

相关内容