使用Agenda.js和Node安排重复工作

时间:2019-10-10 12:52:21

标签: node.js mongodb agenda

我正在使用Agenda.js和Node(以MongoDB为后盾)设置作业调度程序。到目前为止,它正在按预期工作。但是,我不清楚如何安排重复的工作,例如,应该每天早上9点运行的工作。

“计划”用于一次作业的计划,但不重复:

agenda.schedule('today at 09:00am CST', 'first job');

“每个”都以“ 3分钟”之类的间隔工作,但不适用于“上午9:00的一天”

agenda.every('3 minutes', 'second job');

由于配置方法应该是可链接的,所以我也尝试了以下方法:

agenda.processEvery('24 hours').schedule('day at 09:45am CST', 'second job');

...这确实在CST第一次上午9:45到达时成功运行了任务,但它没有将其重置为在第二天同时运行。

每天上午9:00,我将使用什么语法来运行作业?而且,更好的是,我该如何安排仅在星期一-星期五运行?

3 个答案:

答案 0 :(得分:1)

Ajenda接受cron格式。所以你可以做这样的事情

这是重复的工作,从星期一到星期五的每周的09:00

job.repeatEvery('0 9 * * 1-5', {
 skipImmediate: true
});

SkipImmediate是可选的。这是上述cron字符串的CRON checker。进一步了解repeatEvery

编辑

制作Job时返回

Agenda

agenda.define('NAME', async job => {
 job.repeatEvery('0 9 * * 1-5', {
 skipImmediate: true
  });
 await job.save()
}

详细了解Creating Jobs

答案 1 :(得分:0)

我有一个类似的用例,但我不想使用 cron 字符串。

const agendaEvery = async (interval, sendTime, name, data, options) => {
  const job = agenda
    .create(name, data)
    .repeatEvery(interval, {
      timezone: 'Asia/Kuala_Lumpur',
      skipImmediate: true,
      startDate: sendTime
    })
    .schedule(sendTime)
  await job.save()
}

这将允许您想每天发送一封电子邮件,您可以使用 ISO 格式的日期时间字符串来安排第一个,并且间隔可以为 .e.g 1 day

答案 2 :(得分:0)

skipImmediate: truerepeatEvery 一起使用,我遇到了打字稿错误。线

agenda.every('0 9 * * 1-5', cronTypes.PUSH, null, {skipImmediate: true});

工作