如何在Node.js中管理Cron作业

时间:2018-08-29 08:00:33

标签: node.js cron

是否有任何node.js库可让您创建n个提供某种密钥的cron作业,然后可以通过密钥删除/编辑特定作业?

例如,我正在寻找这样的东西:

import cronManagerLibrary from 'library';

export const startJob = (key) => {
  cronManagerLibrary.addJob(key, '10 * * * * *', function);
}

export const removeJob = (key) => {
  cronManagerLibrary.removeJob(key);
}

export const updateJob = (key) => {
  cronManagerLibrary.updateJob(key, interval);
}

export const listJobs = () => {
  cronManagerLibrary.list();
}

更新:

我发现这个库cron-job-manager确实可以满足我的需要,但是由于每次都需要创建一个作业管理器对象,因此我不确定如何持久保存作业列表。

这是我尝试过的:

import CronJobManager from 'cron-job-manager';

export startJob = (key) => {
  const manager = new CronJobManager();
  taskFunction = () => {
    console.log('CRON JOB RUNNING');
  }
  manager.add(key,'10 * * * * *', taskFunction);
  manager.start(key);
  console.log(manager);
}

每次我为了创建新的cron作业而调用startJob函数时,manager对象将不会保留先前开始的作业...是否有办法处理? >

2 个答案:

答案 0 :(得分:3)

您可以使用cron模块来执行此操作。使用npm i cron安装cron。例如,

var CronJob = require('cron').CronJob;

new CronJob('* * * * * *', function () {
    console.log('You will see this message every second');
}, null, true, 'America/Los_Angeles');

有关更多信息,请参见文档,

如果您想进行更多的cron活动,则可以随时使用任何终端命令。参见下面的示例,

var exec = require('child_process').exec;

exec("crontab -l", function(err, stdout, stderr) {
    console.log(stdout);
});

答案 1 :(得分:0)

这应该可以解决问题,以管理您的cron作业!

import { CronJob } from 'cron';

export class CronManager {
    constructor() {
        this._jobs = {};
    }
    add(name, periodText, fn) {
        this._jobs[name] = {
            name,
            cron: new CronJob(periodText, fn, null, true)
        };
    }
    stop(name) {
        delete this._jobs[name];
    }
    delete(name) {
        delete this._jobs[name];
    }
    stopAll() {
        for (let cron in this._jobs) {
            let activeCron = this._jobs[cron].cron.running;
            if (activeCron.running) {
                activeCron.stop();
            }
        }
    }
    list() {
        return this._jobs;
    }
    running(name) {
        return this._jobs[name].cron.running;
    }
    lastDate(name) {
        return this._jobs[name].cron.lastDate();
    }
    nextDates(name) {
        return this._jobs[name].cron.nextDates();
    }
}