2013-02-14 85 views
17

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

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作业。 – 2013-02-14 05:54:49

+0

@cwolves我在Windows 7的任何想法如何工作? – 2013-02-14 06:10:36

+0

如果你使用的不是Linux兼容的操作系统,那么使用另一个可以执行相同操作的程序。 [Windows任务计划似乎是一个受欢迎的答案。](http://stackoverflow.com/questions/132971/what-is-the-windows-version-of-cron) – ekillaby 2013-08-07 05:57:16

回答

39

基本上有三种方式去

  1. setInterval()

setTimeout(f, n)函数等待n毫秒和调用函数fsetInterval(f, n)函数调用f每毫秒。

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

此打印每小时test。您可以将您的代码(除了require语句)放入setInterval()。但是,这对我来说似乎很难看。我宁愿与:

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

  2. Use a libary正如我在回答时意识到的那样,人们甚至可以将此视为该问题的重复。

+2

setInterval – Jonathan 2013-11-30 23:27:47

+3

中有一个输入错误以供参考:http://nodejs.org/api/timers.html – BozoJoe 2014-04-03 04:34:04

+2

Node.js计划在毫秒级别,它只是看起来像一个可怕的建议,建议你应该使用这些策略来在JavaScript中安排未来的事情。只有很多事情会以意想不到的方式改变时间,让计算机进入睡眠/休眠等状态。像其他人所建议的,在这种情况下,您应该将长期调度委派给基于Microsoft的系统程序。 – 2015-10-08 18:09:20