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('Daily task: clean temporary data');
        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 для создания выражений.

Управление запуском и остановкой задач

const job = app.cronJobManager.addJob({ ... });
job.start(); // Запустить задачу
job.stop();  // Остановить задачу
Tip

Запланированные задачи запускаются и останавливаются вместе с приложением. Обычно вам не нужно запускать или останавливать их вручную.