📢 Release 1.0.0-beta.11(2026-06-03)现已推出
Arcadia

数据关系模型

数据库对于该功能设计了三个数据表 taskstaskCoretasksExecutionStatstaskCore 表专用于关联定时任务工作引擎。

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 引擎驱动,整体流程如下:

No Cron 引擎触发 runCronTask 并发检查 runTaskModel emitTaskStarted execShell onExit 回调 cleanupRunningTaskState emitTaskCompleted persistTaskExecution success? notifyTaskFailure

流程说明

阶段说明
Cron 引擎触发node-cron 按 cron 表达式触发定时回调
runCronTask任务执行入口,负责并发检查和状态管理
runTaskModel执行具体的任务模型(Shell 命令)
emitTaskStarted通过 WebSocket 推送任务开始事件
execShell执行 Shell 脚本,捕获 stdout/stderr
onExit 回调Shell 进程退出后触发清理和持久化
cleanupRunningTaskState清理运行中任务的状态缓存
emitTaskCompleted通过 WebSocket 推送任务完成事件
persistTaskExecution持久化任务执行记录到数据库
notifyTaskFailure任务失败时发送通知(需开启 error_notify)