2014-06-17 8 views
16

के साथ हर 45 मिनट में क्रॉन जॉब चलाएं मैं अनुसूचित नौकरियों को चलाने के लिए नोड-क्रॉन का उपयोग कर रहा हूं। मैं नौकरियों हर 45 मिनट चलाना चाहते हैं, लेकिन इसकी अजीब व्यवहार कर रहीनोड-क्रॉन

यहाँ पैटर्न मैं

'00 */45 * * * *'

उपयोग कर रहा हूँ मैं Tue Jun 17 2014 08:17:39 GMT+0000 (GMT)

यहाँ पर मेरी स्क्रिप्ट शुरू कर दिया की पहली हैं नौकरी को दो बार निष्पादित किया गया था

1. Tue Jun 17 2014 08:45:03 GMT+0000 (GMT)

2. Tue Jun 17 2014 09:00:01 GMT+0000 (GMT)

3. Tue Jun 17 2014 09:45:02 GMT+0000 (GMT)

यह निश्चित रूप से मैं उम्मीद या चाहते हैं क्या नहीं है। मैं चाहता हूं कि हर 45 मिनट में जॉब्स चलाएं। क्या कोई मुझे पैटर्न के साथ मदद कर सकता है? धन्यवाद :)

उत्तर

31

आप शायद के लिए

0 */45 * * * * 

पर्वतमाला देख रहे हैं here हैं।

  • सेकंड: 0-59
  • मिनट: 0-59
  • घंटे: 0-23
  • महीने का दिन: 1-31
  • महीने: 0-11
  • के दिन सप्ताह: 0-6
+3

यह नहीं "हर 45 मिनट" लेकिन "हर घंटे 45 में" के लिए इस के साथ की कोशिश की है। – Cody

+0

ने इसका परीक्षण किया, लेकिन ऐसा लगता है कि यह हर सेकेंड भी चल रहा है, जो पहले * की वजह से समझ में आता है जब '17: 50: 18' पर शुरू होता है तो यह' 18: 00: 01' '18:00:02 पर चलता है 'आदि मैं पहले * –

+1

के स्थान पर 00 कोशिश करने जा रहा हूं, इसे सेकंड फ़ील्ड में थोड़ा समायोजन के साथ काम करने के लिए मिला, यहां पैटर्न है; '0 */45 * * * *' –

-3

बस इस कोशिश,

0-23/45 * * * * 
+0

यह हर घंटे 0 मिनट पर है। – Cody

+0

मुझे लगता है, यह हर 45 मिनट में 0 से 23 घंटे तक है। – Ajit

+0

मुझे लगता है कि पहला कॉलम 'SECONDS' के लिए है, ताकि 45 सेकंड –

1

आपको यह तय करने के लिए एक स्क्रिप्ट के रूप में एक स्क्रिप्ट लिखनी होगी कि वास्तविक आदेश प्रत्येक 45 मिनट में निष्पादित किया जाएगा या नहीं। वह 0, 45, 30 (= 45 + 45 - 60), 15 (= 30 + 45 - 60), 0 (= 15 + 45 - 60)। इसलिए, स्क्रिप्ट चलाने के लिए मिनट 0,15,30,45 होगा।

कमांड date +%M शेल स्क्रिप्ट में सहायक हो सकता है।

+0

मैं नोड-क्रॉन नामक लाइब्रेरी का उपयोग कर रहा हूं, यह सब मेरे लिए आवश्यक क्रॉन पैटर्न है। मुझे नहीं लगता कि मैं इसके साथ काम करने के लिए स्क्रिप्ट लिख सकता हूं, यदि यह संभव है, तो मुझे नहीं पता कि कैसे। एक लिंक है https://github.com/ncb000gt/node-cron –

+0

क्षमा करें, मैं नोड-क्रॉन का उपयोग नहीं करता हूं। कभी नहीं सुना। उपरोक्त विधि क्रॉन के लिए है। शायद नोड-क्रॉन में कुछ अतिरिक्त वाक्यविन्यास होते हैं जो क्रॉन नहीं होते हैं। मैं एक समान समस्या से मुलाकात की है, और crontab के मैनुअल पढ़ा है। मुझे नहीं लगता कि क्रॉन के लिए "हर दो सप्ताह" या "हर 45 मिनट" जैसी चीज़ें करना संभव है। तो, एक स्क्रिप्ट को एक रैपर के रूप में लिखने के लिए यह जांचने के लिए कि क्या रन करना एकमात्र विकल्प है। – Cody

+0

मुझे लगता है कि आपको शायद सही विचार है। लेकिन चूंकि [नोड-क्रॉन] (https://github.com/ncb000gt/node-cron) जावास्क्रिप्ट कोड का निष्पादन शेड्यूल करता है, कमांड नहीं, ओपी को एक जावास्क्रिप्ट फ़ंक्शन लिखना होगा जो जांचता है कि इसे चलाना चाहिए या नहीं। –

10

मैं node-cron के साथ क्रॉन से अधिक परिचित हूं, लेकिन मैंने प्रलेखन पर एक त्वरित रूप से देखा है।

यदि मैं इसे सही ढंग से समझता हूं, तो नोड-क्रॉन क्रॉन द्वारा उपयोग किए जाने वाले समान वाक्यविन्यास का उपयोग करता है, लेकिन अतिरिक्त "सेकंड" फ़ील्ड के साथ। तो एक क्रॉन जॉब हो सकता है जहां: (एक अतिरिक्त के साथ

'0 */15 * * * *' 

:

# min hour mday month wday command 
*/15 * * *  * some-command 

हर 15 मिनट चलाने के लिए some-command शेड्यूल करने के लिए, नोड क्रॉन एक ऐसी ही वाक्य रचना समय निर्दिष्ट करने के लिए चलाने के लिए प्रयोग करेंगे सेकंड निर्दिष्ट करने के लिए फ़ील्ड), लेकिन यह एक निर्दिष्ट जावास्क्रिप्ट फ़ंक्शन निष्पादित करता है, बाहरी आदेश नहीं।

मानक क्रॉन में, प्रत्येक 45 मिनट में नौकरी चलाने के लिए कोई वाक्यविन्यास नहीं है। 0/45 * * * * का एक विनिर्देश घंटे के बाद 0 और 45 मिनट पर प्रत्येक घंटे दो बार नौकरी चलाएगा। हर 45 मिनट में नौकरी चलाने के लिए (00:00, 00:45, 01:30, 02:15, ... यानी, प्रति दिन 32 बार) आपको इसे हर 15 मिनट चलाने के लिए शेड्यूल करना होगा, और फिर एक स्क्रिप्ट का आह्वान करें जो यह तय करने के लिए वर्तमान समय की जांच करता है कि कुछ भी करना है या नहीं।

एक समान दृष्टिकोण नोड-क्रॉन के लिए काम करना चाहिए। प्रत्येक 15 मिनट चलाने के लिए फ़ंक्शन को शेड्यूल करें, और उस फ़ंक्शन को आज़माएं जो वर्तमान समय को जांचने के लिए जांचें कि क्या चलाना है या नहीं। उदाहरण के लिए, आप जांच सकते हैं कि आधी रात मॉड्यूल 45 से मिनटों की संख्या शून्य है या नहीं। (यदि शेड्यूलिंग सटीक नहीं है, तो आप एक छोटे से भिन्नता की अनुमति दे सकते हैं।)

मुझे इस फ़ंक्शन को लिखने का सबसे अच्छा तरीका सुझाए जाने के लिए पर्याप्त रूप से जावास्क्रिप्ट नहीं पता है, लेकिन यह उचित रूप से सरल होना चाहिए।

1

ऐसा करने के लिए कोई प्रत्यक्ष तरीका नहीं है। हालांकि, हम लक्ष्य स्क्रिप्ट के भीतर एक खोल कमांड का उपयोग करके शेड्यूल को अवरुद्ध करके परिणाम प्राप्त कर सकते हैं।

सबसे पहले, हर 15 मिनट पर स्क्रिप्ट चलाने: फिर

*/15 * * * * <target_script> 

, target_script भीतर, निम्नलिखित कोड वास्तविक कोड से पहले जगह: की तरह

#!/bin/sh 

# Exit except at 0:45, 1:30, 2:15, 3:00, 3:45 etc 

if ! echo "((`date +%-H`*60)+`date +%-M`)/45" | bc -l | grep "\.0*$" &> /dev/null; 
then exit 1; 
fi 

# Your actual code goes here; 
0

उपयोग क्रॉन NPM moduel कुछ यह

var cronJob = require('cron').CronJob; 
var job = new cronJob({ 
    cronTime:'0 */45 * * * *', 
    onTick: function(){ 
     var my_date = new Date(); 
     var tomorrow_date = my_date.getFullYear() + "-" + ('0'+(my_date.getMonth()+1)) + "-" + (my_date.getDate()+1) 
     var condition = [{},{$set: {'plannedDeliveryDate' :tomorrow_date +'T00:00:00.000Z'}}] 
     dbQuery.updateMany(orderModel, condition, function(err, result){ 
      if(result.nModified == result.n) console.log(err, result) 
     }) 
    }, 
    start:true, 
    timeZone:'Asia/Kolkata' 
}); 
job.start(); 
0

मैं 45 सेकंड के अंतराल और काम ठीक

'*/45 * * * * *'