क्रोनजोब हर दो हफ्ते चलता है, शनिवार को, इस शनिवार को शुरू होता है


11

आज शुक्रवार, 3 अक्टूबर, 2014 3:58 बजे है

मैं निम्नलिखित तिथियों में इसे चलाने के लिए एक क्रोनजॉब शेड्यूल करना चाहता हूं:

  1. शनिवार, 4 अक्टूबर, 2014 8:00 पूर्वाह्न
  2. शनिवार, 18 अक्टूबर, 2014 8:00 पूर्वाह्न
  3. शनिवार, 1 नवंबर, 2014 8:00 पूर्वाह्न ...

इसलिए हर 2 हफ्ते में, शनिवार को, 8 बजे।

जवाबों:


27
0 8 * * 6 test $((10#$(date +\%W)\%2)) -eq 1 && yourCommand

date +%W: सप्ताह के पहले दिन के रूप में सोमवार के साथ सप्ताह की संख्या, आज सप्ताह 39

10#$(date +%W): date +Wदशमलव संख्या में कनवर्ट करें और शेल बेस पार्सिंग भ्रम से बचें

$((39%2)): मोडुलो ऑपरेशन: परिणाम 0 (यहां तक ​​कि सप्ताह की संख्या) या 1 (विषम सप्ताह की संख्या) है, इस सप्ताह का परिणाम 1 है, अगले सप्ताह 0

test 1 -eq 1: अंकगणित परीक्षण (बराबर), इस मामले में परिणाम बूलियन सच है

&& yourCommand: बूलियन और: yourCommandकेवल तभी चलाएं जब पिछली कमांड का परिणाम बूलियन सच था

ध्यान दें कि वर्ष दो विषम सप्ताह प्राप्त कर सकता है: 53 (इस वर्ष) और 1 (अगले वर्ष)


2
यह सुरुचिपूर्ण है! फिर भी, जैसा कि आपने नोट किया है, वर्ष के 53 वें शनिवार को एक कोने का मामला होता है, जो हर चार शताब्दियों में लगभग सत्तर साल होगा।
MadHatter

@ साइरस आपके उत्तर के लिए धन्यवाद, लेकिन अगर मैं * * * * 5 परीक्षण $ लिखता हूं ((($ +% W)% 2)) -eq 1 && /u02/restore/scripts/test.sh स्क्रिप्ट नहीं करता है चलाएं, लेकिन अगर मैं * * * * 5 /u02/restore/scripts/test.sh स्क्रिप्ट चलाता हूं। आपकी अभिव्यक्ति क्यों काम नहीं कर रही है? मैं सिर्फ मामलों का परीक्षण कर रहा था। और पाया कि किसी तरह काम नहीं कर रहा है।
कुपा

1
मेरी गलती। क्रोन ने नई रेखा के रूप में% की व्याख्या की। अपने क्रोनजोब में ए के साथ दोनों% बच जाएं:0 8 * * 6 test $(($(date +\%W)\%2)) -eq 1 && yourCommand
साइरस 13

इस पुराने प्रश्न को वापस लाने के लिए क्षमा करें, लेकिन यह मेरे लिए काम नहीं कर रहा था और जब मैं $((10#$(date +%W)%2)) -eq 1 && echo OKअपने शेल को निष्पादित करने का प्रयास करता हूं तो सप्ताह की गणना के परिणाम को निष्पादित करने का प्रयास करता है -bash: 1: command not found:। कोई सुराग क्यों ऐसा कर रहा है? धन्यवाद।
जुहेट

3
@ झूझ: testकोई यूजर इट कमांड नहीं है। कोशिश करें:test $((10#$(date +\%W)%2)) -eq 1 && echo odd || echo even
सायरस

4

आपने जो दिखाया है वह "हर सप्ताह" है। फिर कोड है:

0 8 * * 6

क्या आप वाकई इसे हर दो सप्ताह में चलाने की आवश्यकता है?

0 8 * * 6 expr `date +\%s` / 604800 \% 2 >/dev/null || yourCommand

1
क्या आप कमांड समझा सकते हैं, कृपया
kupa

1
यह बेहतर है कि साइरस ने क्या दिया - $ (($ (तारीख +% W)% 2)) "W" का मतलब है साल भर में एक सप्ताह। शून्य से शुरू होकर 53. यदि इसे दो से विभाजित किया जा सकता है, तो यह आपका "हर दूसरा" सप्ताह है। इसलिए क्रोनजॉब हर हफ्ते चलता है, लेकिन 'एक्‍सआर' आपके आदेश को पूरा करता है, तभी वीक का नंबर 2 से विभाजित किया जा सकता है
ग्‍लूऑन

जब मैं परीक्षण $ (($ (दिनांक +% W)% 2)) चलाता हूं, तो कमांड लाइन पर -१ १ कुछ नहीं देता, क्यों?
kupa

1
बस echo $?उस कमांड को चलाने के बाद, उसके रिटर्न कोड को देखने के लिए दौड़ें - यही इसके साथ महत्वपूर्ण है
एएल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.