【问题标题】:Execute different nodejs scripts at a given time在给定时间执行不同的 nodejs 脚本
【发布时间】:2016-01-19 11:09:35
【问题描述】:

我正在寻找一个很好的解决方案,可以在给定时间在 Ubuntu 上运行的服务器上使用 nodejs 触发不同的 javascript 文件。

我有大约 10 个不同的脚本,每个脚本应该每天触发 15 次!我的第一种方法是使用at,但这对于这么多事件来说真的很混乱。

现在我考虑在 SO 上使用 Node-Schedule 你们中的一些人 here 的建议,但我不确定这是否是我任务的最佳解决方案......

如果节点调度仍然是最好的方法 - 你会使用什么结构?

var schedule = require('node-schedule');
var d1 = new Date(2015, 10, 20, 18, 55, 0);
var d2 = new Date(2015, 10, 20, 18, 58, 0);

var xd1 = schedule.scheduleJob(d1, function(){
    test.js;
});

var xd2 = schedule.scheduleJob(d2, function(){
    test.js;
});

似乎不是 DRY ... ;)

【问题讨论】:

  • 这就是 cron 的设计目的
  • 我最终使用了普通的 cron,它工作得非常好!

标签: javascript node.js ubuntu scheduled-tasks


【解决方案1】:

我不会仅仅为了安排另一个节点程序而创建节点程序。使用普通的 cron。

如果您可以每天运行 16 次而不是 15 次,则可以使用以下两个 cron 表达式安排每 90 分钟一次:

' 0 0/3 * * * node test.js'
'30 1/3 * * * node test.js'

如果必须是 15 次,这个时间表有很好的分布(最多每小时一次,至少每隔一个小时,每天 15 次):

'0 0/2,1,9,17 * * * node test.js'

若有任何理解此时间表的困难,请使用this site。如果您需要将 15 次调用平均分配空间(每 96 分钟一次),恐怕您需要将它们分成 5 个时间表:

 0 0,8,16  * * * node test.js
36 1,9,17  * * * node test.js
12 3,11,19 * * * node test.js
48 4,12,20 * * * node test.js
24 6,14,22 * * * node test.js

【讨论】:

    【解决方案2】:

    如果您需要每天运行脚本,这种基于日期的调度并不是最佳解决方案。 cron 样式的调度更适合。

    例如

    var xd1 = schedule.scheduleJob('0 * * * *', function(){
        test.js;
    });
    

    将每小时运行一次您的函数(0:00、1:00、2:00 等 = 一天 24 次)。

    var xd1 = schedule.scheduleJob('0 */2 * * *', function(){
        test.js;
    });
    

    将每两个小时运行一次您的函数(0:00、2:00、4:00 等 = 一天 12 次)。

    每天 15 次是硬性要求吗?您无法使用 cron 语法轻松定义这种间隔,除非将其拆分为不同的 cronjobs(= 使用相同的函数调用定义更多作业)。

    这个例子会每天运行 15 次,但它在一天中并不均衡:

    var xd1 = schedule.scheduleJob('*/25 */5 * * *', function(){
        test.js;
    });
    

    【讨论】:

      猜你喜欢
      • 2016-11-29
      • 1970-01-01
      • 2019-10-30
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2013-06-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多