← 中文资源

简体中文版本

构建带运行历史的定时任务面板

数据库驱动调度的定时任务面板:cron 解析校验、子进程隔离执行带超时、运行历史与失败告警。

阅读英文原文

目标

构建把任务定义与调度存于 SQLite、按解析后的 cron 表达式准时触发、在隔离子进程中带硬超时执行、并把每次结果连同输出记录进运行历史供面板展示的定时任务系统。

要点

调度器从“意图触发时刻”而非“观察到的完成时刻”重排,两分钟任务跑在五分钟调度上才不会永久漂移;漏掉的间隔只触发一次并回到日历锚点,五分钟停机不会连发五次;执行都是带超时与独立输出的子进程,卡死的命令只损失一条运行记录而非整个面板;健康是从运行历史派生的事实而非独立存储。

提示

输出在入库前截尾到固定行数——话痨任务不能慢性拖垮数据库。

验证

注入时钟测试模拟跨三个间隔的跳变断言单次触发;超时测试跑真 sleep 过限断言记录为 timed out。 项目目录骨架:

cron-dashboard/
├── src/
│   ├── scheduler.js
│   ├── runner.js
│   ├── server.js
│   ├── store.js
│   └── ui/
│       └── index.html
├── test/
│   ├── scheduler.test.js
│   └── runner.test.js
├── package.json
└── README.md

实施阶段:Job store and schedule computation → Scheduler loop → Isolated runner → Dashboard API and UI。