【问题标题】:How to schedule jobs to run at different times for different users如何为不同的用户安排作业在不同的时间运行
【发布时间】:2017-04-16 03:57:37
【问题描述】:

我正在构建一个功能,允许用户安排由服务器生成的报告。

即用户 A 想要安排在每天下午 5 点生成报告并通过电子邮件发送给他 而用户 B 希望每天上午 10 点安排相同的时间。

可能有许多用户希望在他们选择的任何时间运行该作业。

我看到有一个叫做节点调度的东西: https://www.npmjs.com/package/node-schedule

您可以在哪里执行此操作:

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

var j = schedule.scheduleJob('42 * * * *', function(){ 
    console.log('The answer to life, the universe, and everything!'); 
}); 

在分钟为每小时 42 时执行 cron 作业。

如果系统只有一个用户,这样的事情可能会起作用,但对于多个用户,我无法硬编码时间来安排工作。有什么建议吗?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    我遇到了同样的问题,然后突然想到这个方法。 您可以为此目的使用 For 循环,这将在需要的时间为每个用户安排作业。

    user.forEach(async(usersData) => {
        schedule.scheduleJob(usersData.date, async() => {
            const sendEmail = await mailService.sendMail(usersData.email, subject, usersData.email);
            if (sendEmail) {
            console.log("Email Sended");
                
            }
        })
    })
    

    【讨论】:

      【解决方案2】:
      const schedule = require('node-schedule'); 
      
      let schedules = {};
      schedules[`${userId1}`] = schedule.scheduleJob('42 * * 1 *', function(){ 
          console.log('Generating report for user 1!'); 
      }); 
      schedules[`${userId2}`] = schedule.scheduleJob('42 3 * * *', function(){ 
          console.log('Generating report for user 2!'); 
      }); 
      schedules[`${userId3}`] = schedule.scheduleJob('42 2 * * *', function(){ 
          console.log('Generating report for user 3!'); 
      }); 
      

      userId1 在分钟为 42(每小时)且月份为一月时执行 cron 作业

      userId2 在分钟为 42(每天)且小时为凌晨 3 点时执行 cron 作业

      userId3 在分钟为 42(每天)且小时为凌晨 2 点时执行 cron 作业

      【讨论】:

      • 这并没有完全回答我的问题。如果用户 2 希望将作业安排在与用户 1 不同的时间,该怎么办?您的回答建议所有用户同时安排作业。
      • 没有。 '42 * * 1 *', '42 3 * * *', '42 2 * * *' 不是同一时间。
      • 谢谢,你是对的。这个解决方案是否可扩展?如果有 100 万用户,那意味着有 100 万个作业被调度并保存在内存中?
      • 是的,这假设存储在内存中。我从未检查过它的可扩展性。但你总是可以做到并分享你的经验:-)
      猜你喜欢
      • 2016-06-13
      • 2017-08-24
      • 2016-09-22
      • 2015-05-27
      • 1970-01-01
      • 2021-04-06
      • 1970-01-01
      • 2020-12-25
      • 2019-12-23
      相关资源
      最近更新 更多