यदि महीने का पहला दिन रविवार है तो यह वास्तव में चलेगा।
कारण यह है कि दो स्थितियां "महीने का दिन" (तीसरा क्षेत्र) और "सप्ताह का दिन" (पांचवां क्षेत्र) एक (दोनों के साथ नहीं होनी चाहिए) से जुड़ी हुई हैं, लेकिन एक (या दोनों में से एक होनी चाहिए)। से 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 बुलियन ऑपरेटर है, यह पिछले कमांड के रिटर्न वैल्यू पर प्रतिक्रिया करता है। यदि test
FALSE लौटाता है तो बाकी कमांड चलाया जाता है।
दूसरी क्रोनजॉब महीने के हर दूसरे दिन आधी रात को चलेगी:
फिर से, date +%u
एक पूर्णांक देता है जहां 1 सोम, 2 मंगल, आदि है।
test
जाँच करता है कि क्या $(date +%u1)
बराबर है 1
(सोमवार)।
&&
AND बुलियन ऑपरेटर है, यदि test
TRUE लौटाता है तो शेष कमांड चलाया जाता है।