我正在寻找一个很好的解决方案,在Ubuntu上运行的服务器上,在给定时间使用nodejs触发不同的javascript文件。
我有大约10个不同的脚本,每天应该被解雇15次!我的第一种方法是使用at,但这对于那么多事件来说真的很混乱。
现在我考虑过使用Node-Schedule你们中的一些人here提出的建议,但我不确定这是否是我工作的最佳解决方案......
如果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;
});
似乎没有干......;)
答案 0 :(得分:1)
如果您需要每天运行脚本,则此基于日期的计划不是最佳解决方案。 cron样式调度更适合。
例如
ByteArrayOutputStream baos = new ByteArrayOutputStream();
final ZipOutputStream out = new ZipOutputStream(baos);
Calendar cal = Calendar.getInstance();
String date = new SimpleDateFormat("MMM-dd").format(cal.getTime());
final String zipName = "COA_Images-" + date + ".zip";
for (Long id : ids){
Object[] stream = inlineSamplesDataProvider.getAttachmentStream(id);
if (stream) {
String fileName = stream[0]
String mimeType = (String) stream[1];
InputStream inputStream = stream[2];
byte[] byteStream = inputStream.getBytes();
ZipEntry zipEntry = new ZipEntry(fileName)
out.putNextEntry(zipEntry);
out.write(byteStream, 0, byteStream.length);
out.closeEntry();
}
}
out.close();
response.setHeader("Content-Disposition", "attachment; filename=\"" + zipName + "\"");
response.setHeader("Content-Type", "application/zip");
response.getOutputStream().write(baos.toByteArray());
response.flushBuffer();
baos.close();
每小时运行一次你的功能(0:00,1:00,2:00,等等=每天24次)。
和
var xd1 = schedule.scheduleJob('0 * * * *', function(){
test.js;
});
每两小时运行一次你的功能(0:00,2:00,4:00,等等=每天12次)。
一天15次是一项艰难的要求吗?您无法使用cron语法轻松定义此类间隔,而无需将其拆分为不同的cronjobs(=使用相同的函数调用定义更多作业)。
这个例子每天运行15次,但在一天中不平衡:
var xd1 = schedule.scheduleJob('0 */2 * * *', function(){
test.js;
});
答案 1 :(得分: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