2013-02-14 84 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