Skip to content

自动化任务:发布、排障与恢复练习 ​

失败补跑、锁管理与恢复 ​

维护日期报告任务前先保存批次日期、专用 state 目录与执行身份,恢复后以锁、created/unchanged、退出码和最终报告验收。具体配置见配套示例。

教学版本族:Python 3.12 标准库;cron 常见五字段模型、launchd 与 Windows Task Scheduler 2.0 仅讲调度语义,不注册或运行任务。核对日期2026-10-17,不称为2026最新版。示例未执行,配置与命令需按目标环境验收。

可重试与不可重试 ​

自动化 重试应按错误分类。锁冲突可稍后重新调度,日期非法应改输入,内容冲突应人工核对,权限错误应修正授权而不是无限重试。重试次数与退避需有界,避免每分钟失败生成无穷日志;本例不内建循环,让调用层看到真实退出码。

中断恢复与批次账本 ​

自动化 恢复先停触发、确认无活跃实例并保留证据,再核对目标、临时文件和锁。目标一致可重跑验证,目标冲突不自动覆盖。缺失日期清单由外部明确列出并逐个重放,不能把调度器最后运行时间当完整账本;本例每日期一个最终文件,但不保证多主机互斥。

专用目录的清理边界 ​

自动化 清理先确认绝对路径在例子目录的 state 内,且无其他任务使用。只删除本项目的report日期文件、.pending与空.lock;不要对计算得出的未知路径执行递归删除。脚本自己不做批量清理,也不删除已存在的冲突报告;恢复步骤在README列出,需读者未来在隔离环境自行确认。

练习与参考解答 ​

题目:恢复时state中有完整report-2026-10-17.json、半写的.pending与空.lock,且已确认无存活实例。目标内容与期望一致。列出保留/清理顺序,以及重跑是否会消费.pending。

参考解答:先停外部触发并保存三个对象的证据,核对state绝对路径、私有归属及普通文件/非链接类型;仅移除确认遗留的空.lock。重跑先比较最终报告,一致即unchanged,不读取或消费.pending,也不会因它存在就覆盖正式报告。待确认成功后可精确清理本例.pending;保留正式报告作为幂等证据,不递归删除state。

核对资料 ​

漏跑、重复执行与产物异常排障 ​

本节沿锁、created/unchanged、退出码和最终报告定位失败层;先确认批次日期、专用 state 目录与执行身份,与配套示例逐项对照,再选择最小修复。

任务没触发与任务失败 ​

自动化 任务没触发要看调度器历史、时区、账户登录和休眠条件;任务启动后退出非零要看参数、权限与程序stderr。两者证据不同。仅看到空日志不能判断未运行,日志路径可能错误或无权限;本项目直接输出简短结果,调用层应负责保存和轮转。

重复执行与结果冲突 ​

自动化 重复执行要比较幂等键、启动来源和并发窗口。不同日期生成不同文件是预期,同日期 unchanged 是可重放;同日期不同内容是协议冲突。发现锁不自动删,确认无进程再恢复;若有多个主机,需换成能覆盖所有调用者的一致性机制,不能共享本地mkdir经验。

路径覆盖与运行身份 ​

自动化 PermissionError 先核对任务实际身份、父目录权限、现有目标类型与受控路径。字符串前缀检查不能排除链接或Windows重解析点;示例逐段拒绝相关对象,但仍依赖私有稳定父目录,不能对抗恶意同身份并发替换。不要为了通过任务把目录设为所有人可写。

练习与参考解答 ​

题目:调度器记录进程已启动,stderr显示conflicting report,退出4;另一个时段没有进程启动记录且主机休眠。两者能否统一用无限重试修复?分别需要哪项证据?

参考解答:不能。退出4说明任务运行后发现同日期目标内容冲突,须保留原报告并人工比较batchDate/schemaVersion与期望,不自动覆盖。没有启动记录且主机休眠属于触发层调查,应核对调度时间、时区、休眠/补跑语义和任务历史,明确缺失批次后再重放。无限重试既不能解释冲突,也不能证明漏批次已经补齐。

核对资料 ​

本节沿用本页资料与示例入口。

重复触发与补跑冲突的复盘 ​

以下演练将日期报告任务的变更、失败证据和恢复验收串起来;先熟悉配套示例中的批次日期、专用 state 目录与执行身份。演练未执行。

故障场景与影响 ​

同一批次被调度器和人工补跑同时触发,出现锁冲突或两份不一致报告。

先记录首次异常时间、受影响对象和最近变更,区分个别对象失败与整条管理链路异常。以下是排查演练,不是已发生事故的实测记录。

按证据定位原因 ​

  1. 以批次键关联计划触发、实际进程和最终产物,区分重试与不同批次。
  2. 核对锁持有者与进程状态,检查超时后进程是否仍运行,不因锁文件年龄直接删除。
  3. 比较提交记录、临时文件与正式产物;检查失败是否发生在写入前、写入中或成功响应丢失后。

恢复步骤与验收 ​

停止新增触发并确认活跃执行者,按任务约定恢复到可重新提交状态。已提交批次应识别为完成,未完成批次使用同一业务键补跑。

验收:连续与并发触发同一批次都不会产生重复业务结果;中断后补跑能收敛到一份完整产物。分别记录调度状态、进程退出码和业务提交证据。

将触发条件、直接原因、修复动作、恢复证据和后续检查写入同一份复盘,明确每项后续工作的负责人。机制参考:官方说明。

五项契约自检 ​

给任何自动化任务写出批次键、身份、时间语义、并发策略和成功产物。少一项就很难解释“重跑是否安全”。本例日期键与确定内容提供单目录报告的重放,锁只覆盖同目录协作实例,退出码则区分拒绝原因。

独立故障推演 ​

不执行项目,推演在临时文件写一半、replace前、replace后但输出前、finally前被强杀四个窗口。分别判断产物是否完整、下次是否能进入以及要保留哪些证据;再说明调度器IgnoreNew能否覆盖另一个手工启动实例。

参考解答与范围 ​

replace前最终报告未改变,临时文件可能部分;replace后报告可完整存在但调用者未见成功,重放应识别 unchanged;强杀可能留下锁,需确认无实例后恢复。IgnoreNew只覆盖同一调度任务。分布式锁、长工作流、跨资源事务和真正断电测试均属于后续,不将本例扩展成生产调度平台。

核对资料 ​

本节沿用本页资料与示例入口。

继续阅读