क्या 31 आवश्यक रूप से एक क्रोन नौकरी में महीने का अंत होता है?


13

क्रोन जॉब के लिए हम जानते हैं कि हम नीचे समय निर्धारित कर सकते हैं।

# +------------ Minute (0 - 59)
# | +---------- Hour (0 - 23)
# | | +-------- Day of the Month (1 - 31)
# | | | +------ Month (1 - 12)
# | | | | +---- Day of the Week (0 - 7) (Sunday is 0 or 7)
# | | | | |
# * * * * * command

जो मैं जानना चाहता हूं वह यह है कि जब हम महीने का दिन ३१ निर्धारित करते हैं, तो क्या इसका मतलब प्रत्येक महीने का अंत है, हालांकि महीने का दिन ३१ नहीं है। उत्तर पाने की आशा रखें।

अग्रिम में धन्यवाद

जवाबों:


22

नहीं, 31 का मतलब 31 है।

हालांकि, आप कुछ चालबाजी कर सकते हैं। किसी भी दिन चलाने के लिए नौकरी सेट करें जो संभावित रूप से महीने का आखिरी दिन हो सकता है (यानी महीने के महीने में 28-31), और फिर अपनी कमांड को शेल एक्सप्रेशन के साथ बदलें जिसमें तारीख की रखवाली के लिए एक टेस्ट शामिल हो। आदेश:

0 0 28-31 * * [ "`date +%m`" != "`date --date=tomorrow +%m`" ] && command

परीक्षण कोष्ठक के अंदर की अभिव्यक्ति बस पूछती है कि क्या आज का महीना नंबर कल के महीने की संख्या से अलग है, जो निश्चित रूप से महीने के अंतिम दिन ही सही होगा। ध्यान दें कि इस अभिव्यक्ति का रूप आपके स्थानीय पर निर्भर करता है date- यदि आपको वर्तमान GNU संस्करण नहीं है तो आपको इसे ट्विक करने की आवश्यकता हो सकती है।

मुझे यह कहना चाहिए कि मैंने इसका आविष्कार नहीं किया था - मैंने इसे मैथ्यू जार्विस द्वारा मेलिंग सूची पोस्ट में एक त्वरित Google के साथ पाया। मुझे लगता है कि यह बहुत मानक पुराने यूनिक्स विज़ार्ड की चाल है, हालांकि।


1
यह "तिथि" =) के लिए
GNU-

4
स्टैकएक्सचेंज साइटों पर, एक सवाल पूछना, जिसका उत्तर Google खोज के साथ दिया जा सकता है, यह कोई बुरी बात नहीं है। वास्तव में यह एक अच्छी बात है, क्योंकि अगले व्यक्ति जो Google में यह खोज करेगा, स्टैकएक्सचेंज पर जवाब ढूंढेगा और यहां आएगा।
मिरिकेन

12

नहीं, मुझे लगता है कि आप जो सबसे अच्छा कर सकते हैं वह महीने की 1 तारीख की आधी रात को चलाया जाता है, या प्रत्येक महीने के लिए अलग-अलग क्रॉस्टैब लाइनें स्थापित की जाती हैं (या कम से कम, 28,29,30 और 31 दिनों के साथ महीनों के लिए एक पंक्ति)

0 0 28,29 2               * /my/command
0 0 30    4,6,9,11        * /my/command
0 0 31    1,3,5,7,8,10,12 * /my/command

धन्यवाद पॉल! मैं दूसरे का अनुसरण करूंगा। दूसरी विधि के लिए क्या मुझे एक ही फाइल को तीन बार सही सेट करने की आवश्यकता है? धन्यवाद फिर से :)

हां, आपको इसे दोहराने की आवश्यकता होगी।
पॉल डिक्सन

7
मुझे क्रॉन के साथ कोई अनुभव नहीं है, लेकिन एक लीप वर्ष में दो बार "0 0 28,29 2" निष्पादित नहीं होगा? ऐसा नहीं है कि यह अगले दो वर्षों के लिए एक समस्या होगी, लेकिन फिर भी ...
दस ब्रिंक

यह एक अच्छा बिंदु है, उस के आसपास कोई आसान तरीका नहीं है
पॉल डिक्सन

4

मुझे नहीं लगता कि आप ऐसा आसानी से कर सकते हैं crontab

एक विकल्प यह होगा cronकि स्क्रिप्ट को हर दिन चलाने के लिए सेट किया जाए और फिर महीने की आखिरी तारीख होने पर स्क्रिप्ट की जाँच करें।


3

मुझे लगता है कि क्रोन में इस उद्देश्य के लिए एक विशेष चरित्र 'एल' है:

*    *    L    *    *    your_script.sh 

हर महीने के अंतिम दिन अपनी स्क्रिप्ट निष्पादित करेगा

दूसरी ओर,

*    *    0    *    *    your_script.sh

आप कुछ इस तरह भी निर्दिष्ट कर सकते हैं:

*    *    *    *    1,5L    your_scrript.sh

प्रत्येक माह के अंतिम सोमवार और शुक्रवार को स्क्रिप्ट चलाने के लिए

या

*    *    *    *    1    your_script.sh

आधी रात को हर सोमवार स्क्रिप्ट चलाने के लिए।


0

यह काम करेगा:

if [ $( date +%-d --date="tomorrow" ) -eq 1 ]
then echo Last day of the current month
else echo Not yet!
     exit 0
fi

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