如何设置节点 - 每月安排

时间:2014-11-02 18:44:14

标签: node.js npm

我在项目中使用node-schedule模块。

var ruleResetLimits = new schedule.RecurrenceRule();
//ruleResetLimits.minute = new schedule.Range(0, 59, 1) //IT WORK FINE FOR EVERY 1 MINUTES 

schedule.scheduleJob(ruleResetLimits, function(){
    logger.info(ruleResetLimits);
    logger.info('MY TASK IS RUN');
});

如何在00:00的第一天按月安排每个月进行节点安排的作业

5 个答案:

答案 0 :(得分:4)

这将在每月的第一天上午12:00运行您的命令

var schedule = require('node-schedule');

var j = schedule.scheduleJob('0 0 1 * *', function(){
    console.log('Your scheduled job at beginning of month');
});

默认情况下,作业只会运行一次。因此,如果您希望每个月都有一份工作,那么当第一份工作运行时,您将不得不再次创建工作。

它使用cron式调度。 cron配置有很多在线示例。您要使用的任何配置都应该非常容易找到,并且大多数配置都适用于node-schedule

请记住,如果您将一次性作业动态地放入这样的节点(在应用程序源中未进行硬编码),那么如果服务器因任何原因重新启动,它们将会丢失。对于一次性作业,我建议实现具有持久存储的作业队列。 Redis通常适用于此,但您也可以使用Mongodb或sql后端。

答案 1 :(得分:2)

你好马克西姆和丹尼尔,

我很抱歉,但问题和答案都不清楚,首先马克西姆要求在1月0日每个月都有一份工作... ...然后你回答一些代码,说它只会运行ONCE ......

......马克西姆然后说“但我希望它只运行一次!”...... ??? ... Daniel然后说“如果你想让它运行一次,请添加j.cancel()!

whaaat ??

我来到这里寻找一个例子,以确保我的节点计划功能将在每天的0月1日运行,并且正如在文档中所述,它完全可以完成recurent任务,因为它是为什么cron工作的一部分它的工作方式!

无论如何我会分享我的代码,如果有人愿意告诉我它是否会以我需要的方式运作,我将非常感激!

var schedule = require('node-schedule');
var rule = new schedule.RecurrenceRule();
rule.month = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
rule.hour = 0;
rule.minute = 0;

var j = schedule.scheduleJob(rule, aggregateStats);

答案 2 :(得分:0)

因此,显然,考虑下一个读者而不是不发布答案而是编辑问题不是我的习惯,直到现在我的参数仍然有效,因此它们似乎是正确的,但是有一个答案。我会自己回答以后的读者:

var schedule = require('node-schedule');
var rule = new schedule.RecurrenceRule();
rule.month = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
rule.date = 1;
rule.hour = 0;
rule.minute = 0;

var j = schedule.scheduleJob(rule, aggregateStats);

请注意将date参数设置为1(每月的某天)

答案 3 :(得分:0)

link所示,具有可选的第一个参数(秒),cron不在每月的1号运行;一旦包含“秒”,它就可以工作(在Ubuntu linux [ec2服务器]上可以观察到!)-

async function monthlyJob() {
  const jobInterval = '00 0 0 1 * *'; // 1st of the month, at 00:00:00 hrs (works)
  // const jobInterval = '0 0 1 * *'; // <-- without the seconds, didnot work!
  const job = new CronJob(jobInterval,
      async () => {
        logger.info(new Date().toISOString());
      },
      null, true
    );
  return job
}

希望这对某人有帮助。

答案 4 :(得分:0)

来自“节点调度”文档:

<块引用>

每 5 分钟执行一次 cron 作业 = */5 * * * *

因此,要在每个月的第一天运行作业,您可以使用以下格式:

scheduleJob('0 0 0 1 */1 *', function () {
    console.log('heeeeey')
});

这将在每个月的第一天 00:00:00 运行该函数。