2009-04-01 8 views
12

मैं इस तरह कुछ कॉन्फ़िगर करने में सक्षम होना चाहता हूं।यूनिक्स/लिनक्स में क्रॉन अभिव्यक्ति सटीक प्रारंभ और समाप्ति दिनांक निर्दिष्ट करने की अनुमति देती है

  1. मैं 2 9/जून/200 9 से 30/12/2009 तक रोज़ाना 7 बजे नौकरी 'एक्स' चलाने के लिए चाहता हूं। वर्तमान दिनांक 4/4/2009 के रूप में विचार करें।

उत्तर

-1

आप इस का उपयोग कर सकते हैं एक crontab कि विशिष्ट अंतराल पर चलाता है उत्पन्न करने के लिए:

http://www.robertplank.com/cron/

या इस

http://www.webmaster-toolkit.com/cron-generator.shtml

एक समाधान सेटअप करने के लिए 6 crons होगा, 1 प्रत्येक महीने के लिए, प्रत्येक महीने उस दिन हर सुबह 7 बजे चलेंगे।

यह शायद सबसे आसान तरीका है, अगला वाला इसे स्क्रिप्ट करना होगा।

-1

नहीं, afaik, आप ऐसा नहीं कर सकते हैं।

क्रॉन फ़ील्ड क्रमश: मिनट, घंटे, महीने का महीना, महीने और सप्ताह के दिन मूल्यों को पकड़ते हैं।

10 5 10 * * means run at 5:10 on every 10th of every month. 

10 5 * 12 * means run at 5:10 on every day in december 

10 5 * * 1 means run at 5:10 every Monday 

आप इसे विशिष्ट महीने की एक श्रृंखला पर चलाने के लिए कर सकते हैं, के रूप में crontab प्रारूप पर्वतमाला स्वीकार करता है। महीने के दौरान अप्रैल से दिसंबर के मामले में 4-12 होगा। लेकिन यह 200 9 तक सीमित होने की आपकी इच्छा को ध्यान में रखता नहीं है।

cronjob के लिए प्रारंभ और बंद तिथियां सेट करने के लिए कोई तंत्र नहीं है। आप हमेशा इस बात को स्क्रिप्ट कर सकते हैं। हर दिन एक cronjob चलाने के लिए और वर्तमान दिनांक 30/12 से पहले की जांच करें। यदि यह 31/12 है तो इसे स्वयं हटा दें। या कुछ और सोचा था।

0 7 * * 6-12 command_X 

का एक crontab क्या आप आंशिक रूप से चाहते हो जाएगा, लेकिन यह 1 जून से शुरू और 31 दिसंबर के माध्यम से चलाए जा सकें। जून और 31 दिसंबर के पहले भाग को छोड़कर एक्स कमांड में लिपि जाना होगा।

14

यह एक कठिन तरीके से किया जा सकता है।

आपको लगता है कि श्रृंखला के लिए तीन अलग-अलग cron नौकरियों की जरूरत है, सभी एक ही कोड चलाने (X इस मामले में):

  • 29 और 30 जून के ("0 7 29,30 6 * X") के लिए एक।
  • जुलाई से नवंबर ("0 7 * 7-11 * X") महीने में हर दिन एक के लिए।
  • दिसंबर के आखिरी दिन के लिए सभी के लिए एक ("0 7 1-30 12 * X")।

यह आपको देता है:

# Min Hr DayOfMonth Month DayOfWeek Command 
# --- -- ---------- ----- --------- ------- 
    0  7  29,30  6  *   X 
    0  7   *  7-11  *   X 
    0  7  1-30  12  *   X 

तो सुनिश्चित करें कि आप 29 जून से पहले उन्हें बाहर टिप्पणी करते हैं, 2010 के आसपास आता है।आप 31 दिसंबर को अंतिम cron नौकरी जोड़ सकते हैं ताकि आपको ईमेल किया जा सके कि इसे अक्षम करने की आवश्यकता है।

या आप X संशोधित कर तुरंत बाहर निकलने के लिए करता है, तो साल 2009.

if [[ "$(date +%Y)" != "2009" ]] ; then 
    exit 
fi 

नहीं है तो फिर इससे कोई फर्क नहीं होगा आप जॉब निष्क्रिय करने के लिए भूल जाते हैं।

4

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

ध्यान दें कि आपको अपनी स्क्रिप्ट को तब तक निष्पादित करने की आवश्यकता होगी जब तक आप इसे चलाने के लिए नहीं चाहते।

निम्नलिखित क्रॉन अभिव्यक्तियां जो आप चाहें (हर दिन सप्ताहांत सहित) करेंगे।

# Make the job executable on 29 June. 
0 6 29 6 * chmod +x /path/to/my/job/script 

# Run the job between June and December, only if it's executable. 
0 7 * 6-12 * test -x /path/to/my/job/script && /path/to/my/job/script 

# Disable execution after 30 December. 
0 8 30 12 * chmod -x /path/to/my/job/script 
2

मैं आमतौर पर कार्यक्रम किया जा रहा रन के साथ तर्क रखने का एक प्रशंसक हूँ: के रूप में आप की जरूरत दें। आप एक क्रॉन नौकरी स्थापित करने के बारे में सोच सकते हैं जो हर दिन स्क्रिप्ट चलाता है, फिर स्क्रिप्ट इस पर निर्णय लेती है कि उसे कुछ भी उपयोगी करना चाहिए या नहीं। जब अंतिम उपयोगी दिन (30 दिसंबर) पारित हो गया है, तो आपकी स्क्रिप्ट क्रॉन्टाब से खुद को हटा सकती है। लिपि में आप जो भी कर रहे हैं और क्यों वर्णन करते हैं, यह जानने के लिए आवश्यक सभी टिप्पणियों के साथ तर्क स्थापित कर सकते हैं।

यदि आपका काम एक बाइनरी प्रोग्राम है, तो आप एक रन_स्क्रिप्ट सेट अप कर सकते हैं जो प्रोग्राम को कॉल करने से पहले इस शेड्यूल फ़िल्टरिंग कार्य करता है।

+1

मुझे असहमत होना होगा - हालांकि यह मानता है कि यह प्रोग्राम थोड़ा सा निर्भर करता है कि प्रोग्राम क्रॉन के माध्यम से चलाने के अलावा अन्य उद्देश्य प्रदान करेगा (और यूनिक्स गीक्स यह मान लेता है कि यह होगा)। यदि यह एक सामान्य उद्देश्य की सेवा करता है, तो या तो नियमों के एक आर्केन सेट में निर्माण करने के लिए यह तय करने के लिए कि इसे कब चलाना चाहिए या कॉन्फ़िगरेशन फ़ाइल को पार्स करना गंभीर है और अनुशंसित नहीं है (जब तक, शायद आपके पास पहले से ही आपकी लाइब्रेरी में टूल्स नहीं हैं जाँच)। 'क्रॉन' या उसके साथ एक भिन्न सौदा करने के लिए बहुत बेहतर है! –

+0

मैं वास्तव में एक नियत तारीख तक एक क्रॉन नौकरी चलाने के लिए एक रास्ता खोज रहा था, शायद दोनों को हटाने के लिए दूसरा काम बना रहा, जब तक कि मैं अपने शब्दों को लालसा नहीं करता हूं कि "स्क्रिप्ट अपने आप पर निर्णय लेती है या नहीं, इसे कुछ भी उपयोगी करना चाहिए"। नौकरियों का एक गुच्छा बनाने के बजाय, मैं सिर्फ अपनी स्क्रिप्ट को हर दिन कॉल करने के लिए एक बनाउंगा और यह तय करेगा कि कुछ करने के लिए कुछ है या नहीं। – StackUnder

संबंधित मुद्दे