मुझे एक Nodejs अनुसूचक की आवश्यकता है जो विभिन्न अंतरालों पर कार्यों की अनुमति देता है [बंद]


127

मैं एक नोड जॉब शेड्यूल की तलाश कर रहा हूं जो मुझे विभिन्न अंतरालों पर कई कार्यों को शेड्यूल करने की अनुमति देगा। उदाहरण के लिए,

  • कॉल फ़ंक्शन ए हर 30 सेकंड
  • फ़ंक्शन बी हर 60 सेकंड
  • फंक्शन C हर 7 दिनों में

मैं इस प्रक्रिया को शुरू करने और रोकने में सक्षम होना चाहता हूं।

अब तक, मैंने देखा है:

  • बाद में - वाक्य रचना मुझे भ्रमित करती है, जाहिर है कि आप एक महीने से भी अधिक समय के कार्यों को नहीं कर सकते

  • एजेंडा - सबसे आशाजनक लगता है, हालांकि मैं डेटाबेस कार्यक्षमता के बारे में उलझन में हूं

  • टाइमप्लान - बहुत आसान है, शुरू और रोक नहीं सकता

मुझे बाद के भ्रामक वाक्यविन्यास मिलते हैं।


1
कैसे के बारे में सिर्फ एक setInterval का उपयोग कर, लगता है जैसे आप क्या कर रहे हैं?
adeneo

हाँ क्यों नहीं setInterval का उपयोग करें?
यमम्बर

मुझे पता है कि हुड के तहत इन उपयोग सेटइंटरवल में से कुछ, लेकिन मैं कुछ उच्च स्तर की तलाश कर रहा था ... अजगर में शेड्यूल ( github.com/dbader/schedule ) का उपयोग करने के लिए तैयार हूं, और मैं एक नोड की तलाश में था उस के अनुरूप
user379468

TaskTimer का प्रयास करें - github.com/onury/tasktimer
ओनुर Yıldırım

मैंने एजेंडा का इस्तेमाल किया, बुरा नहीं
१ov

जवाबों:


223

मैं सिफारिश करूंगा node-cron। यह क्रोन पैटर्न का उपयोग करके कार्यों को चलाने की अनुमति देता है

'* * * * * *' - runs every second
'*/5 * * * * *' - runs every 5 seconds
'10,20,30 * * * * *' - run at 10th, 20th and 30th second of every minute
'0 * * * * *' - runs every minute
'0 0 * * * *' - runs every hour (at 0 minutes and 0 seconds)

लेकिन यह भी अधिक जटिल कार्यक्रम जैसे

'00 30 11 * * 1-5' - Runs every weekday (Monday through Friday) at 11:30:00 AM. It does not run on Saturday or Sunday.

नमूना कोड : चल रहा है काम हर 10 मिनट:

var cron = require('cron');
var cronJob = cron.job("0 */10 * * * *", function(){
    // perform operation e.g. GET request http.get() etc.
    console.info('cron job completed');
}); 
cronJob.start();

आप नोड-क्रोन विकी में अधिक उदाहरण पा सकते हैं

क्रोन कॉन्फ़िगरेशन पर अधिक क्रोन विकी पर पाया जा सकता है

मैं कई परियोजनाओं में उस पुस्तकालय का उपयोग कर रहा हूं और यह काम करता है। मुझे उम्मीद है कि इससे मदद मिलेगी।


ठीक है, मुझे क्रोन सिंटैक्स द्वारा धमकाया गया था, लेकिन यह सबसे अच्छा तरीका लगता है
user379468

1
प्रतीक्षा करें मैंने जल्द ही बात की, मैं हर 5 सेकंड या हर 30 सेकंड में एक क्रोन कैसे लिखूंगा?
user379468

3
क्रोन सिंटैक्स डरावना लग सकता है । दूसरी ओर यह लंबे समय तक मौजूद है और व्यापक रूप से पता है इसलिए SO पर बहुत समर्थन मिलेगा
टॉम

1
बस मेरी प्रतिक्रिया को अपडेट किया जाए तो यह होगा - '* / 5 * * * * * - प्रत्येक 5 सेकंड या' * / 30 * * * * * सेकंड
टॉम 16

1
वर्ष 2020 तक, और नोड-क्रोन आधिकारिक npm पेज के अनुसार, इस पैकेज का उपयोग कम हो गया है। यह पैकेज 2 साल पहले npm में अंतिम बार प्रकाशित किया गया था, इसलिए इसे नियमित रूप से अपडेट नहीं किया जाता है। अब, बल्कि एक और पैकेज नोड-क्रोन जो जाहिरा तौर पर एक ही नाम है, लेकिन अलग-अलग URL द्वारा जाता है को प्राथमिकता दी जानी चाहिए।
nnnoob

36

मैंने नोड-क्रोन और एजेंडा का उपयोग किया है

नोड-क्रोन एक बहुत ही सरल पुस्तकालय है, जो कि कोरीटैब की तरह एपीआई को समझने के लिए बहुत ही बुनियादी और आसान प्रदान करता है। यह किसी भी विन्यास की जरूरत नहीं है और सिर्फ काम करता है।

var cronJob = require('cron').CronJob;
var myJob = new cronJob('00 30 11 * * 1-5', function(){...});
myJob.start();

एजेंडा बहुत अधिक जटिल सेवाओं के लिए बहुत शक्तिशाली और फिट है। Ifttt के बारे में सोचो , आपको लाखों कार्य चलाने होंगे। एजेंडा सबसे अच्छा विकल्प होगा।

नोट: आपको Mongodb की आवश्यकता है एजेंडा का उपयोग करने के लिए

var Agenda = require("Agenda");
var agenda = new Agenda({db: { address: 'localhost:27017/agenda-example'}});
agenda.every('*/3 * * * *', 'delete old users');
agenda.start();

1
किसी कारण से, जब मैं एजेंडा का उपयोग करने की कोशिश करता हूं तो मुझे एक त्रुटि मिलती है संदर्भ: एजेंडा परिभाषित नहीं है। मैंने एनपीएम के साथ पैकेज स्थापित किया, क्या मुझे तत्काल एजेंडा करने से पहले कुछ करना है?
user379468

2
मुझे लगता है कि आपको इसे अपने स्थानीय वैरिएबल की आवश्यकता होगी। var एजेंडा = आवश्यकता ("एजेंडा");
रयान वू

1
मैंने हाल ही में एजेंडा, प्रोजेक्ट सेटअप और प्रोजेक्ट संरचना के बारे में एक ब्लॉग टिप्पणी लिखी है। goo.gl/5sCNBM
रॉबिन वियर्च

1
ध्यान दें कि आपको एजेंडा का उपयोग करने के लिए मोंगोडब की आवश्यकता है
मार्क रॉबसन

1
क्या नोड-क्रोन या एजेंडा एक अलग नोड सिस्टम प्रक्रिया को स्पॉन करता है? आप उन्हें एक बहु नोड प्रक्रिया सेटअप में उपयोग कर सकते हैं?
प्रसाद सिल्वा

14

मुझे लगता है कि सबसे अच्छी रैंकिंग है

1.node-अनुसूची

2.later

3.crontab

और नोड-शेड्यूल का नमूना नीचे है:

var schedule = require("node-schedule");
var rule = new schedule.RecurrenceRule();
//rule.minute = 40;
rule.second = 10;
var jj = schedule.scheduleJob(rule, function(){
    console.log("execute jj");
});

शायद आप नोड मॉड्यूल से जवाब पा सकते हैं ।


1
साझा करने के लिए प्यार वाक्य रचना, धन्यवाद
Overdrivr

10

मैंने एक नोड मॉड्यूल लिखा है जो सेटपर के आसपास एक आवरण प्रदान करता है।

npm हर पल स्थापित करें

var every = require('every-moment');

var timer = every(5, 'seconds', function() {
    console.log(this.duration);
});

every(2, 'weeks', function() {
    console.log(this.duration);
    timer.stop();
    this.set(1, 'week');
    this.start();
});

https://www.npmjs.com/package/every-moment

https://github.com/raygerrard/every-moment



यह बहुत पठनीय है। मैंने एक पैकेज लिखा है जो node-cron@Tom उत्तर के रूप में उपयोग होता है । और तुम्हारा एक अच्छा वाक्यविन्यास है। reel().call(() => console.log('hello !!')).everyMinute().run() github.com/shakee93/node-reel
shakee93

@ kekko12 एनपीएम पर है: npmjs.com/package/every-moment
अली हेसारी


1

मैंने ऐसा करने के लिए एक छोटा मॉड्यूल लिखा है, जिसे टाइमएक्स कहा जाता है :

  • इसका सरल, छोटा विश्वसनीय कोड और इसकी कोई निर्भरता नहीं है
  • रिज़ॉल्यूशन मिलीसेकंड में है और समय के साथ उच्च परिशुद्धता है
  • क्रोन की तरह, लेकिन संगत नहीं (उलट क्रम और अन्य सुधार)
  • मैं ब्राउजर में भी काम करता हूं

इंस्टॉल:

npm install timexe

उपयोग:

var timexe = require('timexe');
//Every 30 sec
var res1=timexe(”* * * * * /30”, function() console.log(“Its time again”)});

//Every minute
var res2=timexe(”* * * * *”,function() console.log(“a minute has passed”)});

//Every 7 days
var res3=timexe(”* y/7”,function() console.log(“its the 7th day”)});

//Every Wednesdays 
var res3=timexe(”* * w3”,function() console.log(“its Wednesdays”)});

// Stop "every 30 sec. timer"
timexe.remove(res1.id);

आप सीधे टाइमएक्स जॉब सरणी में प्रविष्टि को हटाकर / पुनः जोड़कर कार्यक्षमता शुरू / रोक सकते हैं। लेकिन यह एक एक्सप्रेस समारोह नहीं है।


4
आपको यह उल्लेख करना चाहिए कि आप लेखक हैं।
a20

13
@ a20 "ने ऐसा करने के लिए एक छोटा मॉड्यूल लिखा है।" इसका मतलब यह है कि वह लेखक है जिसे पढ़ते समय आपने छोड़ दिया है
PirateApp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.