systemd timer运行时间不符、list-timers字段异常问题咨询
问题1:timer仍在按规律触发运行的前提下,为何list-timers的NEXT、LEFT字段显示为n/a?
核心原因是你的sync.service配置了RemainAfterExit=yes:
Type=oneshot类型的服务开启该参数后,执行完ExecStart指定的脚本后,服务状态会保持为active (exited)而非默认的inactive- systemd timer判定关联服务仍处于活跃状态时,不会计算下一次触发时间,因此
NEXT、LEFT字段都会显示为n/a
问题2:为何sync.service的日志运行时间与timer的LAST字段记录的时间不匹配?
你在日志里看到的非预期时间的服务启动,不是sync.timer触发的:
- timer的
LAST字段仅记录timer本身按照配置规则成功触发服务的时间 - 非timer触发的服务启动不会更新timer的
LAST字段,因此会出现二者时间不匹配的情况
问题3:为何sync.service会反复在UTC时间0点左右运行?
原因出在sync.service的Requires=another.service配置,和timer规则无关,这也是你修改timer的OnCalendar配置后问题仍然存在的原因:
Requires强依赖规则会要求被依赖的another.service启动时,同步启动sync.service- 你的环境里
another.service应该固定在UTC 0点左右重启/启动,因此会连带触发sync.service同步启动
修复方案
- 先确认
another.service的启动规律,如果不需要another.service启动时自动触发同步,可以把Requires=another.service改成After=another.service,仅声明启动顺序依赖,不绑定启动逻辑 - 如果你的同步脚本不需要执行完后保留活跃状态,可以删掉
sync.service里的RemainAfterExit=yes配置,修改后执行systemctl daemon-reload,重启sync.timer即可恢复timer的下一次触发时间显示
内容的提问来源于stack exchange,提问作者Atsushi
相关产品推荐
相关产品推荐

