在Node.js中设置定时器

22

我需要在Node.js中每24小时运行一次代码。我找到了一个叫做setTimeout的函数。以下是我的代码片段。

var et = require('elementtree');
var XML = et.XML;
var ElementTree = et.ElementTree;
var element = et.Element;
var subElement = et.SubElement;
var data='<?xml version="1.0"?><entries><entry><TenantId>12345</TenantId><ServiceName>MaaS</ServiceName><ResourceID>enAAAA</ResourceID><UsageID>550e8400-e29b-41d4-a716-446655440000</UsageID><EventType>create</EventType><category term="monitoring.entity.create"/><DataCenter>global</DataCenter><Region>global</Region><StartTime>Sun Apr 29 2012 16:37:32 GMT-0700 (PDT)</StartTime><ResourceName>entity</ResourceName></entry><entry><TenantId>44445</TenantId><ServiceName>MaaS</ServiceName><ResourceID>enAAAA</ResourceID><UsageID>550e8400-e29b-41d4-a716-fffffffff000</UsageID><EventType>update</EventType><category term="monitoring.entity.update"/><DataCenter>global</DataCenter><Region>global</Region><StartTime>Sun Apr 29 2012 16:40:32 GMT-0700 (PDT)</StartTime><ResourceName>entity</ResourceName></entry></entries>'
etree = et.parse(data);
var t = process.hrtime();
// [ 1800216, 927643717 ]

setTimeout(function () {
  t = process.hrtime(t);
  // [ 1, 6962306 ]
  console.log(etree.findall('./entry/TenantId').length); // 2
  console.log('benchmark took %d seconds and %d nanoseconds', t[0], t[1]);
  //benchmark took 1 seconds and 6962306 nanoseconds
},1000);

我希望每小时运行以上代码并解析数据。为了参考,我将计时器值设为一秒钟。有什么建议吗?谢谢。


4
每小时运行整个脚本一次,而不是依赖节点进程始终处于活动状态。如果您使用的是Linux系统,请查找"cron jobs"。但并不像这样... - user578895
@cWolves,我在Windows 7上,你有什么想法吗? - Amanda G
如果你使用的不是Linux兼容的操作系统,那么请使用另一个能够完成相同任务的程序。Windows任务计划程序似乎是一个流行的选择。 - awhie29urh2
我也同意@cwolves的观点,即没有必要让你的node.js程序一直运行。这只是在您的系统中运行的另一个进程,似乎是不必要的。 cron的想法是它是一个管理器,用于按计划运行潜在的多个脚本或作业,同时仅使用运行预定运行时间的内容所需的系统资源。 - awhie29urh2
TaskTimer - https://github.com/onury/tasktimer - Onur Yıldırım
1个回答

47

基本上有三种方法可行

  1. setInterval()

setTimeout(f, n) 函数等待n毫秒并调用函数fsetInterval(f, n) 函数每个n毫秒调用f一次。

setInterval(function(){
  console.log('test');
}, 60 * 60 * 1000);      

每小时打印一次test。你可以将代码(除了require语句)放入setInterval()中,但这似乎有点丑陋。我宁愿选择:

  1. 定时任务 大多数操作系统都有一种调度任务的方式。在Windows上,这称为“计划任务”,在Linux上找cron。

  2. 使用一个库 正如我在回答问题时意识到的那样,人们甚至可以将其视为那个问题的重复。


2
setInterval 中有一个打字错误。 - Jonathan
2
Node.js被安排在毫秒级别,建议在JavaScript中使用这些策略来安排远期事务似乎是可怕的建议。有太多的事情以出乎意料的方式改变时间,使计算机进入睡眠/休眠等状态。正如其他人所建议的,在这种情况下,您应该将长期调度委托给基于Microsoft的系统程序。 - Michael Blankenship

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接