【问题标题】:User scheduled jobs用户计划作业
【发布时间】:2017-01-20 12:34:41
【问题描述】:

我想允许我的用户在他们希望执行特定操作时设置时间表。我在 azure 上使用节点服务器。我目前正在查看节点计划并将使用它。我正在考虑的是每小时运行一个主计划,检查数据库中用户指定的计划,这个计划根据用户的计划设置一个新的计划。但我不知道这是否是一个好习惯,而且我担心服务器负载。

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    您可以为此使用节点的cron,并以不同的方式进行调整。 下面的伪代码给出了一个大概的思路。

    var CronJob = require('cron').CronJob;
    
    new CronJob('0 0 * * * *', function () { // every hour
    
       // check schedules planned for the future, stored as ISODate
       DB.getUserSchedule({jobdate:{$gte:Date.now()},
    
         function(userSchedules) {
               userSchedules.forEach(sched) {
    
                 // convert the date back to a string parsed by cron
                 var d=extractDayHourMin(sched)
                 var jobtime = d[4] +' '+d[3]+' '+d[2]+' '+d[1]+' '+d[0]
    
                 // setup a new job
                 var job=new CronJob(jobtime, function() {
                    performUserJob()
                    job.stop(); // fires only once
                    DB.removeUserSchedule(userSchedule);
                 })});
    

    https://github.com/ncb000gt/node-cron

    但是,这可能不是最好的解决方案:这确实会创建与计划一样多的进程,所以是的,它会消耗比所需更多的资源。除了调度调度程序,根据可能的日历的粒度(小时、1/2 小时、1/4 小时),您还可以每小时(或 30 或 15 百万)查询数据库以检索每个满足的日期,并触发相应的功能。

    【讨论】:

    • 您好,非常感谢您的回复。但是我的问题还没有回答。这是解决此问题的最佳方法吗,使用主作业来设置新作业,还是有其他方法不会占用大量资源。
    • @Olarewaju :我在答案中添加了一个§
    【解决方案2】:

    搜索 Quartz 时间表。 我的项目使用它来设置发送电子邮件的时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-01
      • 2010-09-19
      • 2013-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多