रविवार को छोड़कर महीने के पहले दिन क्रोनजोब


2

मेरी कोंट्राब में ऐसी प्रविष्टि है:

0 0 1-2 * 1-6

यह सही है कि यह सोमवार से शनिवार तक महीने के 00:00, 1 या दूसरे दिन चलेगा? उदाहरण के लिए, यदि 1 दिन रविवार होगा तो यह नहीं चलेगा, है ना? लेकिन इसके बजाय यह महीने के दूसरे दिन क्रोनजॉब चलाएगा क्योंकि यह रविवार नहीं होगा।

जवाबों:


5

यदि महीने का पहला दिन रविवार है तो यह वास्तव में चलेगा।

कारण यह है कि दो स्थितियां "महीने का दिन" (तीसरा क्षेत्र) और "सप्ताह का दिन" (पांचवां क्षेत्र) एक (दोनों के साथ नहीं होनी चाहिए) से जुड़ी हुई हैं, लेकिन एक (या दोनों में से एक होनी चाहिए)। से man 5 crontab:

नोट: एक कमांड के निष्पादन का दिन दो क्षेत्रों द्वारा निर्दिष्ट किया जा सकता है - महीने का दिन, और सप्ताह का दिन। यदि दोनों फ़ील्ड प्रतिबंधित हैं (यानी, नहीं हैं *), कमांड तब चलाया जाएगा जब या तो फ़ील्ड वर्तमान समय से मेल खाती है। उदाहरण के लिए, `` 30 4 1,15 * 5 'प्रत्येक महीने की 1 और 15 तारीख को और प्रत्येक शुक्रवार को सुबह 4:30 बजे एक कमांड चलाया जाएगा।

तो आपका क्रोनजॉब महीने की 1 और 2 तारीख की आधी रात को चलेगा और इसके अलावा महीने के हर सोम, मंगल, गुरु, शुक्र, शुक्र और शनि।

यदि आपको महीने में केवल एक बार कमांड चलाने की आवश्यकता है, लेकिन रविवार को नहीं, जैसा कि आप अपनी टिप्पणी में लिखते हैं, तो आपको कमांड में ही तारीख की जांच करनी चाहिए ।

ये कमांड चलाने की शर्तें हैं:

IF (date is 1st day of month AND date is not Sunday) 
    OR (date is 2nd day of month AND yesterday was Sunday) 
THEN run command

आप दो क्रोनोजर लिख सकते हैं:

0 0 1 * * test $(date +\%u) -eq 7 || echo "today's the 1st day of the month but not Sun"
0 0 2 * * test $(date +\%u) -eq 1 && echo "today's Mon (=yesterday was Sun) and the 2nd day of the month"

पहला क्रोनजॉब महीने के हर 1 दिन आधी रात को चलेगा:

  • date +%uएक पूर्णांक देता है जहां 1 सोम, 2 मंगल है, आदि ('%' को एक क्रॉस्टैब में भाग जाने की आवश्यकता है )।

  • testजाँच करता है कि क्या $(date +%u1)बराबर है 7(रविवार)।

  • ||OR बुलियन ऑपरेटर है, यह पिछले कमांड के रिटर्न वैल्यू पर प्रतिक्रिया करता है। यदि testFALSE लौटाता है तो बाकी कमांड चलाया जाता है।

दूसरी क्रोनजॉब महीने के हर दूसरे दिन आधी रात को चलेगी:

  • फिर से, date +%uएक पूर्णांक देता है जहां 1 सोम, 2 मंगल, आदि है।

  • testजाँच करता है कि क्या $(date +%u1)बराबर है 1(सोमवार)।

  • &&AND बुलियन ऑपरेटर है, यदि testTRUE लौटाता है तो शेष कमांड चलाया जाता है।


धन्यवाद "टेस्ट $ (दिनांक +% u) -eq 7" में परीक्षण का क्या मतलब है?
अलेक्जेंडर किम

@ हियैची मैंने अपना उत्तर संपादित करके स्पष्ट कर दिया। man testअधिक जानकारी के लिए देखें ।
jaume

समझ गया। लेकिन अगर महीने का पहला और दूसरा दिन सोमवार और मंगलवार है, तो क्रॉन एक महीने में 2 बार चलेगा। मुझे महीने में केवल एक बार कमान चलाने की जरूरत है, लेकिन रविवार को नहीं। इसके लिए बेहतर जगह बैश स्क्रिप्ट में ही है?
अलेक्जेंडर किम

यह स्पष्ट करने के लिए धन्यवाद। मैंने अपना उत्तर संपादित किया, मैंने प्रस्ताव किया है कि आप दो क्रोनॉजर्स लिखें (आप एक भी लिख सकते हैं, लेकिन testकथन जटिल होगा।)
jaume
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.