在给定时间执行不同的nodejs脚本

Execute different nodejs scripts at a given time

本文关键字:nodejs 脚本 定时间 执行      更新时间:2023-09-26

我正在寻找一个很好的解决方案在fire不同的javascript文件与nodejs在一个给定的时间在服务器上运行在Ubuntu上。

我有大约10个不同的剧本,每个剧本每天应该被解雇15次!我的第一个方法是使用at,但是由于事件太多,这会变得很混乱。

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

如果Node-Schedule仍然是最好的方法,你会使用什么结构?

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;
});

看起来不那么干…div;)

我不会创建一个节点程序只是为了调度另一个节点程序。使用普通的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'

如果理解这个时间表有困难,请使用这个网站。如果您需要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

如果您需要每天运行脚本,那么基于日期的调度不是最佳解决方案。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语法,如果不把它分成不同的cronjob(=用同一个函数调用定义更多的job),就不能很容易地定义这种间隔。

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

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