← 返回资讯

服务器关机错过三天维护任务,Persistent会补跑三次还是只触发一次

2026-10-24

Persistent让错过日历触发的timer在恢复后补一次唤起,不承诺为停机的每一天逐次重放。若维护业务要求处理漏掉三天,应让一次处理器计算缺失日期并逐日执行,而不是依赖timer替你保存业务进度。

区分触发时间和完成水位

先分开触发进度与业务完成进度。系统记得timer是否错过触发,不等于知道哪些数据日已经处理成功。维护任务应保存自己的最后完成日期,按明确时区和半开区间生成待办;一次启动可以处理多个缺日,成功后再推进业务标记。

核对OnCalendar与Persistent适用范围

附件把最后完成日设为十月二十日、当前日为二十四日,输出二十一、二十二、二十三三个待处理日期。已追平的边界返回空计划。它只做计划演算,不写真实用量或账务,也没有注册timer,所以结果不能被描述为实测了服务器关机与开机。

一次唤起处理多日时,处理器需要保存逐日完成状态,某天失败后不能跳到最后日期一次性标完成。若任务可以部分继续,也要明确失败日如何重试。timer只管何时启动服务,幂等键、业务时间区间和提交状态应属于处理器本身,这样停机恢复与人工补跑才能使用同一套逻辑。

示例unit或排查命令:以下路径与服务名须按目标环境替换,本文没有注册或执行这些服务操作。

[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
Unit=demo-maintenance.service

说明时区和时钟同步边界

官方timer语义还包括服务已活跃时不会额外并行启动同一服务。处理器本身仍应设计幂等、失败重试与明确退出码,避免一次漏日出错却把后续全部标完成。需要补历史数据时,进度记录应跟随真正提交,而不是跟随唤起次数或本机日期字符串。

适用范围:不注册真实定时任务;脚本只输出计划不写网关账务,Persistent语义以官方文档与可选用户级实验分别标记。

配套样本与复核入口

  • run.py:独立运行程序,包含合成输入、操作和正反例断言。
  • case.json:输入说明、预期任务与适用范围,便于保存和交接。
  • observed.json:本次实际执行输出;临时路径、进程号和计时可能随运行变化。

运行后one_handler_plan列出三个缺日,already_caught_up为空,日期输入全部在run.py里可见。读者可以先手工列日期再对照程序,确认是否包含当前尚未结束的日期。迁入真实维护处理器时,还需确定时区、最后成功提交日与失败重试;这些业务定义不能由timer的Persistent选项替你决定。

Python3.8以上及标准库即可。本题的维护日期全部是程序内合成输入,运行不会读取网关业务数据,也不会注册服务或定时任务。

python -B run.py

阅读输出时,先按case.json中的任务逐项核对网关systemd定时维护漏跑补偿,再与observed.json比较。非零退出表示依赖或断言需要处理,应保留实际错误。

一手依据1(Persistent仅对OnCalendar补触发;服务已活跃时不会另开一次;不承诺逐次补跑错过的每一天。)。

继续阅读:网关修好配置还是提示start request repeated too quickly,怎样处理启动限额;批量导入渠道到第三行失败,怎样按既定策略保留成功项或整批回滚;按天导出网关用量,怎样避免跨午夜漏单和重复统计。

加微信,把这一页发到你手机上

扫码加站长企业微信,会自动把这一页的链接发给你。模型接入、token 计费上有问题,也可以直接问。

去留微信

不想自己搭网关、自己维护渠道?

力达云是托管的 OpenAI / Anthropic 双格式端点,一期提供 DeepSeek,注册送 ¥5 额度。

去试用

这个页面有问题?

提交时会附带当前页面地址和浏览器信息,帮助我们定位问题。不填联系方式即为匿名。