Skip to content

v0.5.0 — 一次性任务 + nextRunAt 驱动调度模型

Choose a tag to compare

@LouisHaoL LouisHaoL released this 05 Sep 11:49
· 4 commits to main since this release

变更

本版将调度模型改为完全依赖持久化的下次执行时间(nextRunAt):cron / 固定间隔只用于计算它,到期即触发。

新增:一次性任务

  • 只设一个执行时间(新建页默认当前 +1 小时),触发一次即自动归档——成功、失败、手动「立即执行」都算消耗
  • 创建入口:新建任务页「一次性」模式 / timer_agent 工具 run_at 参数 / API runAt 字段
  • 「跳过一次」对一次性任务无意义:UI 隐藏、服务端拒绝

变更

  • 暂停不再清空下次执行时间;恢复基于真实上次执行时间(最后一条 execution.startedAt,回退 lastTriggeredAt)重算,错过的执行不补跑,直接跳到下一个未来时间点
  • 固定间隔 / 一次性任务的下次执行时间可手动修改(详情页控件 / PATCH nextRunAt / 工具 next_run_at);Cron 严格按表达式,服务端拒绝手改
  • 循环任务 tick 滚动加竞态防护:用户手改的 nextRunAt 不会被调度器覆盖
  • 新建页执行模式改为下拉框(位于「启用定时执行」之后,未勾选时禁用)
  • 修复:normalizeSchedule 现识别一次性规则(带时间证据才保留,遗留空白脏行仍丢弃)

向下兼容

  • ✅ 旧版本台账(~/.dsh/timer-agent/jobs.json)无需迁移,升级即用:v0.4.0 及更早的 cron / 固定间隔 / 暂停态行全部原样保留;空白脏行仍被丢弃(与旧版一致),损坏台账依旧降级不崩溃
  • ✅ 旧版代码路径不可能写出一次性任务的行形态,不存在旧任务被误判为一次性而自动归档的风险
  • ⚠️ 唯一注意:升级后若回滚到 v0.4.0,一次性任务的排程会被旧版校验丢弃(任务变回未排程);cron / 固定间隔任务不受影响

Full Changelog: v0.4.0...v0.5.0