CronJobManager Manajemen Tugas Terjadwal

CronJobManager adalah manajer tugas terjadwal yang disediakan NocoBase, berbasis pada cron. Anda dapat mendaftarkan tugas terjadwal di plugin, untuk mengeksekusi logika tertentu secara periodik.

Penggunaan Dasar

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

export default class PluginCronDemo extends Plugin {
  async load() {
    this.app.cronJobManager.addJob({
      cronTime: '0 0 * * *',       // Eksekusi setiap hari pukul 00:00
      onTick: async () => {
        console.log('Task harian: Membersihkan data sementara');
        await this.cleanTemporaryData();
      },
      timeZone: 'Asia/Shanghai',
      start: true,                  // Otomatis dimulai
    });
  }

  async cleanTemporaryData() {
    // Eksekusi logika pembersihan di sini
  }
}

Penjelasan Parameter

Tipe CronJobParameters didefinisikan sebagai berikut (dari 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;
}
ParameterTipePenjelasan
cronTimestring | Date | DateTimeEkspresi waktu tugas terjadwal. Mendukung ekspresi cron standar, seperti 0 0 * * * berarti dieksekusi setiap hari pukul 00:00.
onTickfunctionFunction utama task. Akan dipicu pada waktu yang ditentukan.
onCompletefunctionDieksekusi saat task dihentikan oleh job.stop() atau onTick aktif memanggil completion.
timeZonestringMenentukan zona waktu eksekusi (misalnya Asia/Shanghai).
contextanyKonteks saat eksekusi onTick.
runOnInitbooleanApakah langsung dieksekusi sekali saat inisialisasi.
utcOffsetstring | numberMenentukan offset zona waktu.
unrefTimeoutbooleanMengontrol apakah event loop tetap aktif.

Contoh Ekspresi Cron

EkspresiArti
* * * * *Eksekusi setiap menit
0 * * * *Eksekusi setiap jam
0 0 * * *Eksekusi setiap hari pukul 00:00
0 9 * * 1Eksekusi setiap Senin pukul 09:00
*/10 * * * *Eksekusi setiap 10 menit
Tips

Anda dapat menggunakan crontab.guru untuk membantu menggenerate ekspresi cron.

Mengontrol Start dan Stop Task

addJob() akan mengembalikan objek job, Anda dapat menggunakannya untuk mengontrol task secara manual:

const job = app.cronJobManager.addJob({ ... });
job.start();  // Memulai task
job.stop();   // Menghentikan task
Tips

Tugas terjadwal akan mengikuti startup dan stop aplikasi, biasanya Anda tidak perlu memanggil start() atau stop() secara manual.

Tautan Terkait