我正在使用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,我将使用什么语法来运行作业?而且,更好的是,我该如何安排仅在星期一-星期五运行?
答案 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: true
与 repeatEvery
一起使用,我遇到了打字稿错误。线
agenda.every('0 9 * * 1-5', cronTypes.PUSH, null, {skipImmediate: true});
工作