2013-02-14 37 views
17

Tôi cần chạy mã trong Node.js sau mỗi 24 giờ. Tôi bắt gặp một hàm có tên là setTimeout. Dưới đây là đoạn mã của tôiĐặt hẹn giờ trong 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); 

Tôi muốn chạy mã trên một lần mỗi giờ và phân tích cú pháp dữ liệu. Để tôi tham khảo, tôi đã sử dụng một giây làm giá trị hẹn giờ. Bất kỳ ý tưởng làm thế nào để tiến hành sẽ rất hữu ích.

+4

không phải như thế này ... Bạn muốn chạy toàn bộ tập lệnh mỗi giờ một lần, không được tính vào quy trình nút để luôn hoạt động. Nếu bạn đang ở trong linux tìm kiếm các công việc cron. –

+0

@cwolves Tôi đang ở trong cửa sổ 7 bất kỳ ý tưởng làm thế nào để làm việc trên đó ?? –

+0

Nếu bạn đang ở trên một cái gì đó khác hơn là một hệ điều hành Linux tương thích sau đó sử dụng một chương trình khác làm điều tương tự. [Windows Task Scheduler có vẻ là một câu trả lời phổ biến.] (Http://stackoverflow.com/questions/132971/what-is-the-windows-version-of-cron) – ekillaby

Trả lời

39

Về cơ bản có ba cách để đi

  1. setInterval()

Chức năng setTimeout(f, n) đợi n mili giây và cuộc gọi chức năng f. Các cuộc gọi hàm setInterval(f, n)f mỗi n mili giây.

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

Điều này in test mỗi giờ. Bạn có thể chỉ cần ném mã của bạn (ngoại trừ các yêu cầu báo cáo) vào một setInterval(). Tuy nhiên, điều đó có vẻ xấu xí với tôi. Tôi muốn đi với:

  1. Nhiệm vụ được lập lịch Hầu hết các hệ điều hành đều có cách thức thực hiện các nhiệm vụ. Trên Windows, nó được gọi là "Scheduled Tasks" trên Linux tìm kiếm cron.

  2. Use a libary Khi tôi nhận ra trong khi trả lời, người ta thậm chí có thể thấy điều này là bản sao của câu hỏi đó.

+2

Có lỗi đánh máy trong setInterval – Jonathan

+3

cho mục đích tham khảo: http://nodejs.org/api/timers.html – BozoJoe

+2

Node.js được lên lịch ở mili giây và nó có vẻ như là lời khuyên khủng khiếp để gợi ý rằng bạn nên sử dụng những chiến thuật này để sắp xếp mọi thứ cho đến tương lai trong JavaScript. Chỉ có rất nhiều thứ thay đổi thời gian theo những cách bất ngờ, đưa máy tính vào trạng thái ngủ/ngủ đông và như vậy. Giống như những người khác đã đề nghị bạn nên ủy quyền lập kế hoạch dài hạn cho các chương trình hệ thống dựa trên Microsoft trong trường hợp này. –