数据关系模型
数据库对于该功能设计了三个数据表 tasks、taskCore 和 tasksExecutionStats。taskCore 表专用于关联定时任务工作引擎。
tasksExecutionStats 表用于记录定时任务的执行统计数据。
model taskCore {
id String @id
cron String
callback String
}
model tasks {
id Int @id @default(autoincrement())
name String
cron String
type String
shell String @default("")
active Int @default(1)
last_runtime DateTime?
last_run_use Int?
tags String @default("")
sort Int @default(99999)
create_time DateTime @default(now())
config String @default("")
remark String @default("")
bind String @default("")
error_notify Int @default(1)
}
model tasksExecutionStats {
id Int @id @default(autoincrement())
task_id Int
task_name String
task_type String
exec_timestamp BigInt
duration Int
success Int
create_time DateTime @default(now())
@@index([task_id, exec_timestamp])
@@index([exec_timestamp])
@@index([task_type, exec_timestamp])
}工作原理
定时任务的生命周期由 Cron 引擎驱动,整体流程如下:
流程说明
| 阶段 | 说明 |
|---|---|
| Cron 引擎触发 | node-cron 按 cron 表达式触发定时回调 |
| runCronTask | 任务执行入口,负责并发检查和状态管理 |
| runTaskModel | 执行具体的任务模型(Shell 命令) |
| emitTaskStarted | 通过 WebSocket 推送任务开始事件 |
| execShell | 执行 Shell 脚本,捕获 stdout/stderr |
| onExit 回调 | Shell 进程退出后触发清理和持久化 |
| cleanupRunningTaskState | 清理运行中任务的状态缓存 |
| emitTaskCompleted | 通过 WebSocket 推送任务完成事件 |
| persistTaskExecution | 持久化任务执行记录到数据库 |
| notifyTaskFailure | 任务失败时发送通知(需开启 error_notify) |

