简体   繁体   English

如何在将来的某个日期时间使用 Nodejs 中的 Agenda 运行类似 cron 的作业

[英]How do I run cron-like job at certain date time in the future using Agenda in Nodejs

I have a problem here.我这里有问题。 How do i run job at certain date time in the future using Agenda like node-scheduler do.我如何在将来的某个日期时间使用 Agenda 像 node-scheduler 那样运行作业。 Based on https://www.npmjs.com/package/node-schedule , node-schedule have cron-style scheduling method.基于https://www.npmjs.com/package/node-schedule ,node-schedule 具有 cron 风格的调度方法。 So it is easier for me to extract date from my input.所以我更容易从我的输入中提取日期。 I have read Agenda documentation https://github.com/rschmukler/agenda#agenda-events , it says Agenda uses Human Interval for specifying the intervals.我已阅读 Agenda 文档https://github.com/rschmukler/agenda#agenda-events ,它说 Agenda 使用 Human Interval 来指定间隔。

定时任务

How can i do this?我怎样才能做到这一点?

If you have a future date, you can convert this to number of days from today or even number of seconds as below and then use the same with agenda cron job如果您有未来的日期,您可以将其转换为从今天起的days数或什至seconds ,如下所示,然后将其用于agenda cron 作业

 function findDaysDifference ( date1, date2 ) { //Get 1 day in milliseconds var oneDay_ms = 1000 * 60 * 60 * 24; // Convert both dates to milliseconds var date1_ms = date1.getTime(); var date2_ms = date2.getTime(); // Calculate the difference in milliseconds var difference_ms = date2_ms - date1_ms; // Convert back to days and return return Math.round(difference_ms/oneDay_ms); } var futureDate = new Date(2018, 0, 1); var daysFromNow = findDaysDifference(new Date(), futureDate); console.log(daysFromNow);

Then create agenda job and schedule it with daysFromNow calculated above,然后创建agenda作业并使用daysFromNow计算的daysFromNow安排它,

agenda.define('sayHello', function(job) {
  console.log("Hello!");
});

// Schedule a job to run once at a given time
agenda.schedule(daysFromNow + ' days', 'sayHello');

If you want to schedule it at particular time in the future, you can calculate the seconds as below,如果你想在未来的特定时间安排它,你可以计算如下秒,

 function findSecondsDifference ( date1, date2 ) { var oneSecond_ms = 1000; // Convert both dates to milliseconds var date1_ms = date1.getTime(); var date2_ms = date2.getTime(); // Calculate the difference in milliseconds var difference_ms = date2_ms - date1_ms; // Convert back to days and return return Math.round(difference_ms/oneSecond_ms); } var futureDate = new Date(2018, 0, 1, 16); var secsFromNow = findSecondsDifference(new Date(), futureDate); console.log(secsFromNow);

Then create agenda job and schedule it with secsFromNow calculated above,然后创建agenda作业并使用secsFromNow计算的secsFromNow安排它,

agenda.define('sayHello', function(job) {
  console.log("Hello!");
});

// Schedule a job to run once at a given time
agenda.schedule(secsFromNow + ' seconds', 'sayHello');

With Agenda.js使用 Agenda.js

interval can be a human-readable format String, a cron format String, or a Number. 间隔可以是人类可读的格式字符串、cron 格式的字符串或数字。

meaning it supports cron-style scheduling method .这意味着它支持cron 风格的调度方法

for example例如

you could schedule a job to run 3 minutes from the current time您可以安排作业从当前时间开始运行 3 分钟

  await agenda.schedule('3 minutes', 'send confirmation to new user', {email:"newuser@mal.com"} );

  // Alternatively, you could also do:
  await agenda.schedule('*/3 * * * *', 'send confirmation to new user', {email:"newuser@mal.com"});
   

run a job Monday at 09:00周一 09:00 运行作业

   await agenda.schedule('0 9 * * 1', 'MondayJob', {msg:"guess what today is 'Monday'"});

run on Saturday at 23:45 (11:45 PM)周六 23:45(晚上 11:45)运行

await agenda.schedule('45 23 * * 6', 'jobName', {});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM