CronJobManager 定时任务管理

CronJobManager 是 NocoBase 提供的定时任务管理器,基于 cron 实现。你可以在插件中注册定时任务,用于周期性执行特定逻辑。

基本用法

import { Plugin } from '@nocobase/server';

export default class PluginCronDemo extends Plugin {
  async load() {
    this.app.cronJobManager.addJob({
      cronTime: '0 0 * * *',       // 每天 00:00 执行
      onTick: async () => {
        console.log('每日任务:清理临时数据');
        await this.cleanTemporaryData();
      },
      timeZone: 'Asia/Shanghai',
      start: true,                  // 自动启动
    });
  }

  async cleanTemporaryData() {
    // 在此执行清理逻辑
  }
}

参数说明

CronJobParameters 类型定义如下(来自 cron):

export declare interface CronJobParameters {
  cronTime: string | Date | DateTime;
  onTick: CronCommand;
  onComplete?: CronCommand | null;
  start?: boolean;
  timeZone?: string;
  context?: any;
  runOnInit?: boolean;
  utcOffset?: string | number;
  unrefTimeout?: boolean;
}
参数类型说明
cronTimestring | Date | DateTime定时任务的时间表达式。支持标准 cron 表达式,比如 0 0 * * * 表示每天 00:00 执行。
onTickfunction任务主体函数。将在指定时间被触发。
onCompletefunction当任务被 job.stop() 停止或 onTick 主动调用完成时执行。
timeZonestring指定执行时区(比如 Asia/Shanghai)。
contextany执行 onTick 时的上下文。
runOnInitboolean是否在初始化时立即执行一次。
utcOffsetstring | number指定时区偏移。
unrefTimeoutboolean控制事件循环是否保持活跃。

Cron 表达式示例

表达式含义
* * * * *每分钟执行一次
0 * * * *每小时执行一次
0 0 * * *每天 00:00 执行
0 9 * * 1每周一 09:00 执行
*/10 * * * *每 10 分钟执行一次
提示

可以用 crontab.guru 辅助生成 cron 表达式。

控制任务的启动与停止

addJob() 会返回一个 job 对象,你可以用它来手动控制任务:

const job = app.cronJobManager.addJob({ ... });
job.start();  // 启动任务
job.stop();   // 停止任务
提示

定时任务会跟随应用启动和停止,通常来说你不需要手动调用 start()stop()

相关链接