क्रोंड ऑफसेट पांच मिनट अनुसूची


22

क्या हर 5 मिनट में एक क्रोन स्क्रिप्ट सेट करना संभव है?

मेरे पास दो स्क्रिप्ट हैं, स्क्रिप्ट 1 एक डेटाबेस से कुछ डेटा एकत्र करता है और इसे दूसरे में सम्मिलित करता है, स्क्रिप्ट 2 इस डेटा और बहुत से अन्य डेटा को बाहर निकालता है और इससे कुछ सुंदर रिपोर्ट बनाता है। दोनों लिपियों को हर 5 मिनट में चलाने की आवश्यकता है। मैं स्क्रिप्ट 2 को एक मिनट तक ऑफसेट करना चाहता हूं ताकि यह नए डेटा से एक रिपोर्ट बना सके। ईजी मैं चाहता हूं कि स्क्रिप्ट एक पर चले :00, :05, :10, :15 [...]और स्क्रिप्ट दो :01, :06, :11, :16 [...]हर घंटे पर चले । स्क्रिप्ट एक-दूसरे पर निर्भर नहीं हैं, और स्क्रिप्ट 2 सफल थी या नहीं इसकी परवाह किए बिना चलना चाहिए। लेकिन यह उपयोगी होगा यदि रिपोर्ट्स में नवीनतम डेटा हो सकता है। क्या क्रोन के साथ यह संभव है?

पद;
मैंने एक शेल स्क्रिप्ट में दोनों कमांड का उपयोग करने के बारे में सोचा है, इसलिए वे एक दूसरे के तुरंत बाद चलते हैं, लेकिन यह काम नहीं करेगा। कभी-कभी स्क्रिप्ट 1 बाहरी एपीआई आदि के इंतजार में लटका हो सकता है, इसलिए इसे चलाने के लिए 15 मिनट तक का समय लग सकता है, लेकिन स्क्रिप्ट 2 को हर 5 मिनट में चलाना चाहिए ताकि ऐसा करना स्क्रिप्ट के निष्पादन को रोकना / विलंब करना होगा। 2. यदि मैं क्रॉन में इसे सेट कर सकता हूं तो इसका मतलब होगा कि स्क्रिप्ट 2 क्या स्क्रिप्ट की परवाह किए बिना चलेगी।

जवाबों:


14

आप जब चाहे तब स्क्रिप्ट चला सकते हैं cron। यदि आप स्क्रिप्ट को हर 5 मिनट में चलाना चाहते हैं, तो आप इस तरह शुरू कर सकते हैं:

*/5 * * * * /path/to/script1

लेकिन यह वास्तव में सिर्फ के लिए आशुलिपि है:

0,5,10,15,20,25,30,35,40,45,50,55 * * * * /path/to/script1

यदि आप स्क्रिप्ट 1 के 2 मिनट बाद स्क्रिप्ट चलाना चाहते हैं, तो आप यह कर सकते हैं:

1,6,11,16,21,26,31,36,41,46,51,56 * * * * /path/to/script2

आप यह भी कर सकते हैं:

*/5 * * * * /path/to/script1
*/5 * * * * /path/to/script2

और फिर स्क्रिप्ट 2 की शुरुआत में, एक मिनट के लिए सोएं:

sleep 60

4
स्लीप को स्क्रिप्ट में ही डालना एक बदसूरत हैक है जो प्रॉम्प्ट से स्क्रिप्ट को हाथ से चलाता है। हैक करने का एक कम बदसूरत तरीका है कि क्रॉस्टैब प्रविष्टि के नींद का हिस्सा बनाकर, लेकिन एक और अधिक सुरुचिपूर्ण तरीका सही क्रॉस्टब नोटेशन का उपयोग करके नौकरियों को भरपाई करना है, जो आपके उत्तर को नहीं छूता है।
कालेब

39

Crontab के लिए मिनट प्रविष्टि क्षेत्र एक "ऑपरेटर की वेतन वृद्धि" को स्वीकार करता है जो भ्रामक है क्योंकि ऐसा लगता है कि यह एक गणितीय "ऑपरेटर द्वारा विभाजित" होना चाहिए लेकिन ऐसा नहीं है। आप अक्सर देखेंगे कि यह निम्नलिखित की तरह कुछ का उपयोग करता है। ध्यान दें कि यह उन संख्याओं को नहीं खोजता है जो पांच से विभाज्य हैं, बल्कि प्रत्येक पांचवें आइटम को एक सेट से लेता है:

 */5 * * * * command

यह क्रोन को /5मिनटों के सेट से प्रत्येक पांचवें आइटम ( ) से मिलान करने के लिए कहता है 0-59 ( *) लेकिन आप सेट को इस तरह बदल सकते हैं:

 1-59/5 * * * * command

यह 1-59 मिनट सेट से हर पांचवें आइटम को ले जाएगा, 6 मिनट, 11, 16 आदि पर अपनी कमांड चलाएगा।

यदि आपको एक मिनट से अधिक महीन दाने वाले पिंडों की आवश्यकता है, तो आप इसे अपने कमांडो के भाग के रूप में स्लीप कमांड का उपयोग करके हैक कर सकते हैं:

 */5 * * * * sleep 15 && command

यह हर पांच मिनट में आपकी नौकरी चलाएगा, लेकिन कमांड वास्तव में मिनट के 15 सेकंड बाद तक शुरू नहीं होगा। शॉर्ट रनिंग जॉब के लिए जहां कुछ सेकंड के बाद कुछ सेकंड का फर्क पड़ता है, लेकिन आप पूरे मिनट देर से नहीं आना चाहते हैं, यह एक साधारण हैक है।


1
यह स्वीकार किए गए से बेहतर उत्तर है। रेंज के माध्यम से ऑफसेट सेट करना सोने की तुलना में बहुत साफ है।
एनडी गीक

11

आप + प्रतीक के साथ एक समय ऑफसेट संकेत कर सकते हैं। उदाहरण के लिए, चलाने के लिए, :01, :06, :11, :16 [...]जैसे कोई कार्य बनाएँ

*/5+1 * * * * command

7
यह क्रॉन के कुछ संस्करणों में काम नहीं करता है
झॉफ

1
इस वाक्य रचना का समर्थन करने वाले क्रोन का कौन सा संस्करण आप उपयोग कर रहे हैं? Cronie इसे समर्थन नहीं करता है।
मैथ्यू जी

मेरे पास CentOS7 पर Cronie है, इसलिए ty मैं पहले इस समाधान की कोशिश नहीं करूंगा।
ऐनीअगाइल

1

यह मेरे लिए काम किया:

1/5 * ? * * *

जहां 1 ऑफसेट मिनट है। इसलिए यदि आप तीन मिनट का ऑफसेट करना चाहते हैं:

3/5 * ? * * *

मेरे पास यह काम एडब्ल्यूएस अनुसूची सेटिंग्स में है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.