Repository navigation
v0.5.0 — 一次性任务 + nextRunAt 驱动调度模型
变更
本版将调度模型改为完全依赖持久化的下次执行时间(nextRunAt):cron / 固定间隔只用于计算它,到期即触发。
新增:一次性任务
- 只设一个执行时间(新建页默认当前 +1 小时),触发一次即自动归档——成功、失败、手动「立即执行」都算消耗
- 创建入口:新建任务页「一次性」模式 /
timer_agent工具run_at参数 / APIrunAt字段 - 「跳过一次」对一次性任务无意义: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