मोहर लगाने से क्रोन कैसे रखें?


13

कहो कि मेरे पास कई क्रोन स्क्रिप्ट हैं जिन्हें हर 15 मिनट में चलाने की आवश्यकता है। मैं उन्हें चलाने के लिए सेट कर सकता था: */15 * * * *लेकिन तब वे सभी एक ही समय में दौड़ते थे। यह सर्वर के लिए कई मिनट के लिए निष्क्रिय बैठने के लिए मूर्खतापूर्ण लगता है और फिर अचानक एक ही समय में एक दर्जन लिपियों को निष्पादित करने का प्रयास करता है।

वहाँ एक तरह से मैं एक स्क्रिप्ट 1 मिनट, 16, 31, 46 और दूसरे 2, 17, 32, 47 पर चला सकते हैं?

दूसरे शब्दों में, मैं चाहता हूं कि प्रत्येक स्क्रिप्ट हर 15 मिनट में चले, लेकिन मुझे इस बात की परवाह नहीं है कि वे विशेष रूप से तिमाही घंटे के निशान पर चलते हैं।

जवाबों:


7

आप इसे जितना कठिन बना सकते हैं, बना रहे हैं। सभी को एक ही पंक्ति में रखें, अर्धविराम द्वारा अलग किया गया:

*/15 * * * * command1 ; command 2 ; command 3

यह चलेगा command1, इसके खत्म होने का इंतजार करें, फिर दौड़ें command2, इसके खत्म होने का इंतजार करें, इत्यादि।


15

यदि आप अपनी क्रॉन जॉब को इस तरह बनाते हैं: 6-59/15 * * * *तो यह 6, 21, 36 और 51 मिनट के समय पर चलेगी।

यह क्रोन के सभी संस्करणों के साथ काम नहीं कर सकता है।


14

आप सभी लिपियों को एक निर्देशिका में रख सकते हैं, कह सकते हैं /etc/cron.15mऔर फिर क्रोन रन कर सकते हैं

*/15 * * * * run-parts /etc/cron.15m

यह मान कर कि आपके पास run-partsआज्ञा है। यह कम से कम सभी डेबियन आधारित प्रणालियों पर मौजूद है। यह नामांकित निर्देशिका में सभी निष्पादन योग्य कार्यक्रमों को चलाता है, सूची क्रम में एक बार।

इस पद्धति का एक नुकसान यह है कि यदि स्क्रिप्ट में से कोई एक लटका हुआ है, तो बाकी सभी प्रतीक्षा करेंगे और निष्पादित नहीं होंगे। यदि उन सभी का रन टाइम 15 मिनट से अधिक है, तो नौकरी फिर से चलने लगेगी और आपको ढेर सारी प्रक्रियाएँ मिल सकती हैं।


run-partsफेडोरा / रेड हैट सिस्टम में भी मौजूद है।
mattdm

9

ऐसा करने का सबसे सीधा तरीका यह है कि आप जब चाहें उन्हें चलाने के लिए मैन्युअल रूप से कमांड सेट करें:

0,15,30,45 * * * * command0
1,16,31,46 * * * * command1
2,17,32,47 * * * * command2
...
14,29,44,59 * * * * command14

या आप उपयुक्त कॉन्टैब प्रविष्टियों (जो टाइपोस से बचते हैं) को स्वचालित रूप से उत्पन्न करने के लिए एक स्क्रिप्ट लिख सकते हैं।

क्रोन के कुछ संस्करण (शायद आप जो उपयोग कर रहे हैं सहित) एक विस्तारित सिंटैक्स स्वीकार करते हैं:

0-59/15 * * * * command0
1-59/15 * * * * command1
1-59/15 * * * * command2
...
14-59/15 * * * * command14

0

क्रोन वास्तव में अच्छा नहीं है जो आप करने की कोशिश कर रहे हैं। क्या आपने एक स्क्रिप्ट लिखने पर विचार किया है जो एक डेमन के रूप में कार्य करता है जो मूल रूप से 15 मिनट सोता है, कमांड निष्पादित करता है, फिर लूप करता है?


1
इसके साथ कुछ संभावित समस्याएं हैं। एक यह है कि यदि आप sleep 300कमांड के प्रत्येक निष्पादन के बीच करते हैं, तो कमांड का स्वयं का निष्पादन समय के बहाव का कारण होगा; यह हर 15:00 के बजाय हर 15:10 चल सकता है। और अगर पृष्ठभूमि प्रक्रिया मर जाती है या सिस्टम रिबूट होता है, तो इसके विपरीत crond, यह स्वचालित रूप से पुनरारंभ नहीं होगा। एक पृष्ठभूमि प्रक्रिया को "निष्क्रिय" करने के तरीके हैं, लेकिन फिर आप बहुत अधिक पुन: कार्यान्वयन कर रहे हैं crond
कीथ थॉम्पसन

हाँ, मैं मानता हूँ कि यह एक सही समाधान नहीं है (हालाँकि आप हमेशा इस कार्य को पृष्ठभूमि में रख सकते हैं), लेकिन वहाँ आप जाते हैं।
मैट सिमंस 21

1
इसके बजाय, क्रोन ने एक ही स्क्रिप्ट चलाई है जो बदले में आपके सभी आदेशों को निष्पादित करती है। वास्तव में, यह इतनी सामान्य आवश्यकता है कि run-partsविशेष रूप से ऐसा करने के लिए अधिकांश क्रोन प्रतिष्ठानों वाले जहाजों को एक मानक स्क्रिप्ट कहा जाता है। @ एंड्रयूशुलमैन का जवाब देखें।
22

0

कई वितरणों में /etc/cron.d/cronhourly होता है, जिसके लिए सभी स्क्रिप्ट प्रति घंटा चलती हैं। आप उन्हें क्रमिक संख्याओं के साथ शुरू करके भी आदेश निर्दिष्ट कर सकते हैं, जैसे 01scriptA 02scriptB - यह क्रॉन ज्ञान के साथ तुच्छ होना चाहिए जो आपको पहले से ही "cronhourlybyfour" का निर्माण करना है क्योंकि हम इसे स्मूथवॉल के लिनक्स डिस्ट्रो बेस के रूप में कहते हैं :)

चेतावनी का शब्द: यह पहले से सुझाए अनुसार रन-पार्ट्स का उपयोग करता है, और रन-पार्ट्स को ए के साथ स्क्रिप्ट पसंद नहीं है। नाम में, इसलिए इसे "deletehomefolders.sh" न कहें, इसे "01deletehomefolders" कहें और सुनिश्चित करें कि आप सही # से शुरू करते हैं! जो कुछ भी आप अपनी स्क्रिप्ट की व्याख्या करने का इरादा रखते हैं उसके लिए लाइन।

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