2013-02-14 18 views
17

में टाइमर सेट करना मुझे हर 24 घंटों में नोड.जेएस में कोड चलाने की आवश्यकता है। मैं 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

ऐसा नहीं है ... आप एक बार एक बार पूरे स्क्रिप्ट को चलाने के लिए चाहते हैं, नोड प्रक्रिया पर हमेशा जीवित रहने के लिए नहीं। यदि आप लिनक्स में हैं तो क्रॉन जॉब्स देखें। –

+0

@cwolves मैं विंडोज 7 में हूं किसी भी विचार को उस पर कैसे काम करना है ?? –

+0

यदि आप लिनक्स संगत ओएस के अलावा किसी अन्य चीज़ पर हैं तो एक और प्रोग्राम का उपयोग करें जो एक ही काम करता है। [विंडोज टास्क शेड्यूलर एक लोकप्रिय उत्तर प्रतीत होता है।] (Http://stackoverflow.com/questions/132971/what-is-the-windows-version-of-cron) – ekillaby

उत्तर

39

वहाँ मूलतः तीन तरीके

  1. setInterval()

setTimeout(f, n) समारोह n मिलीसेकंड इंतजार कर रहा है और कॉल f ढंग से काम जाने के लिए कर रहे हैं। setInterval(f, n) फ़ंक्शन f प्रत्येक n मिलीसेकंड कॉल करता है।

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

यह प्रिंट हर घंटे test प्रिंट करता है। आप setInterval() में अपना कोड (आवश्यकता बयानों को छोड़कर) फेंक सकते हैं। हालांकि, यह मेरे लिए बदसूरत लगता है।

  1. अनुसूचित कार्य अधिकांश ऑपरेटिंग सिस्टम कार्य sheduling का एक तरीका है: मैं नहीं बल्कि साथ जाना चाहते हैं। विंडोज़ पर इसे क्रोन के लिए लिनक्स पर "Scheduled Tasks" कहा जाता है।

  2. Use a libary जैसा कि मुझे जवाब देने के दौरान एहसास हुआ, कोई भी इसे उस प्रश्न के डुप्लिकेट के रूप में देख सकता था।

+2

संदर्भ प्रयोजनों के लिए setInterval – Jonathan

+3

में एक टाइपो है: http://nodejs.org/api/timers.html – BozoJoe

+2

नोड.जेएस मिलीसेकंद स्तर पर निर्धारित है और यह यह सुझाव देने के लिए भयानक सलाह की तरह लगता है कि आपको जावास्क्रिप्ट के भीतर भविष्य में चीजों को शेड्यूल करने के लिए इन रणनीतियों का उपयोग करना चाहिए। ऐसी कई चीजें हैं जो अप्रत्याशित तरीकों से समय बदलती हैं, कंप्यूटर को सोने/हाइबरनेट में डाल देती हैं। दूसरों की तरह सुझाव दिया है कि आपको इस मामले में माइक्रोसॉफ्ट आधारित सिस्टम कार्यक्रमों के लिए दीर्घकालिक शेड्यूलिंग का प्रतिनिधि होना चाहिए। –