कैसे एक biweekly cronjob अनुसूची करने के लिए?


11

crontab (5) निम्नलिखित क्षेत्रों को परिभाषित करता है:

       field         allowed values
       -----         --------------
       minute        0-59
       hour          0-23
       day of month  1-31
       month         1-12 (or names, see below)
       day of week   0-7 (0 or 7 is Sun, or use names)

और जानकारी:

 Step values can be used in conjunction with ranges.  Following a range
 with ``/<number>'' specifies skips of the number's value through the
 range.  For example, ``0-23/2'' can be used in the hours field to specify
 command execution every other hour (the alternative in the V7 standard is
 ``0,2,4,6,8,10,12,14,16,18,20,22'').

इसलिए, मेरी समझ से कोई बायवेकली जॉब्स नहीं है। मुझे पूरा यकीन है कि वहाँ काम कर रहे हैं, तुम्हारा क्या है? या किसी को याद किया था?


2
इसका सबसे अच्छा जवाब मैं इस पर पा सकता हूं: unix.stackexchange.com/questions/1224/…
Somantra

... और यू एंड एल पर उन उत्तरों का तरीका यह होगा कि मैं इसे करूंगा, @Somantra :-)
voretaq7

@ voretaq7, मैंने कहा है कि यह विहित उत्तर था, लेकिन मैं पांडित्य के रूप में सामने नहीं आना चाहता था ;-)
सोमंतरा

जवाबों:


8

आपके पास हर वेडनसडे को क्रॉन द्वारा चलाई जाने वाली चीज़ हो सकती है, फिर चीज़ को रन करने का फ़ैसला करें अगर यह एक सप्ताह या विषम सप्ताह है। उदाहरण के लिए:

#!/bin/bash
week=$(date +%U)
if [ $(($week % 2)) == 0 ]; then 
    echo even week
else 
    echo odd week
fi

यह एक अच्छा समाधान है, हालांकि, वास्तव में खुद ही सवाल का जवाब नहीं देता है - मैं शेड्यूल लॉजिक के साथ बात को दागदार नहीं करना पसंद करूंगा। हो सकता है कि मैं इसे उस लिंक के साथ एकीकृत कर सकता हूं जो @Somantra ने दिया था।
रोमन

ठीक है, मुझे मानना ​​चाहिए: यह अब तक का सबसे अच्छा समाधान है। @Somantra ने जो लिंक दिया था, वह समान रूप से जटिल IMHO (UNIX समय के साथ गिनती) के समान परिणाम प्राप्त करता है, लेकिन एक ही शैली में क्रोनजोब (स्क्रिप्ट के बजाय) में सीधे अपने दृष्टिकोण को जोड़ने से यह काफी सुरुचिपूर्ण हो जाता है।
रोमन

यह वर्ष 2020 में टूटता है क्योंकि इसमें 53 सप्ताह हैं। Ex: यदि आपका क्रोन 31 दिसंबर को द्वि साप्ताहिक चलाने के लिए निर्धारित किया गया था, तो यह 31 दिसंबर, 2020 (53 वें सप्ताह) और 4 जनवरी, 2020 (1 सप्ताह) पर चलेगा।
mad_fox 12

5

कई क्रोन (आपने निर्दिष्ट नहीं किए हैं कि आप किसका उपयोग कर रहे हैं) समर्थन रेंज। तो कुछ ऐसा है

0 0 1-7,15-21 * 3

महीने के पहले और तीसरे बुधवार को हिट होगा।


यह "स्क्रिप्ट में करें" विधि की तुलना में थोड़ा अधिक सुरुचिपूर्ण है, लेकिन अपने कॉन्टैब पर एक टिप्पणी जोड़ना याद रखें (यदि आपके पास अंगूठे का सामान्य नियम है -या /इसमें एक से अधिक शामिल हैं या संभवतः यह अनुसूची का वर्णन करने के लिए टिप्पणी करने लायक है)
voretaq7

मुझे संदेह है कि यह गलत है; यह 1 -7 वें पर काम चलाने का कारण होगा, और प्रत्येक महीने के 15-21st, और हर बुधवार को भी। इससे यह है man 5 crontab: " कमांड के निष्पादन का दिन दो क्षेत्रों द्वारा निर्दिष्ट किया जा सकता है - महीने का दिन, और सप्ताह का दिन। यदि दोनों फ़ील्ड प्रतिबंधित हैं (यानी, नहीं हैं *), तो कमांड तब चलाया जाएगा जब कोई भी फ़ील्ड मेल खाता हो।" वर्तमान समय। उदाहरण के लिए, "30 4 1,15 * 5" प्रत्येक माह की 1 और 15 तारीख को प्रातः 4:30 पर चलने के लिए एक कमांड का कारण होगा, साथ ही प्रत्येक शुक्रवार "(मेरा जोर)।
मदहटर्ट

1
दरअसल, यह निर्भर करता है कि आप किस क्रोन डेमॉन का उपयोग कर रहे हैं। आपकी प्रविष्टि विक्सी क्रोन (RedHat distros में शामिल) से प्रतीत होती है। डिल्लो के क्रोन (स्लैकवेयर) पर "मैन क्रॉस्टैब" से: यदि आप महीने में एक दिन और सप्ताह के दिन दोनों को निर्दिष्ट करते हैं, तो * इसे महीने में ऐसे दिन के रूप में व्याख्या की जाएगी। फिर भी, एक स्क्रिप्टेड समाधान (सप्ताह संख्या की गणना) केवल पोर्टेबल समाधान की तरह दिखता है।
AlvaroGMJ

2

कुछ के लिए जो हर दूसरे सप्ताह चलने की जरूरत है इस एक लाइनर का उपयोग करें:

0 0 * * 5 [ `expr \`date +\%V\` \% 2` -eq 0 ] && echo "execute script" 

यह विशेष स्क्रिप्ट शुक्रवार को चलने वाली है। जिस सप्ताह निष्पादित किया जाना है उसे "-ईक 0" या "-ईक 1" का उपयोग करके समायोजित किया जा सकता है


1

क्रोन की सीमाओं के लिए एनाक्रोन एक अच्छा समाधान है।

  • एनाक्रॉन में एक पुनरावृत्ति अवधि पैरामीटर है जिसे आप 14 पर सेट कर सकते हैं।

अवधि देरी नौकरी-पहचानकर्ता कमान

14 15 test.daily /path/to/script.sh


दुर्भाग्य से, एनाक्रॉन का उपयोग नहीं किया जा सकता है। उसका उल्लेख करना भूल गया।
रोमन

1

यदि आपकी जरूरतें वास्तव में द्वि-साप्ताहिक नहीं हैं, तो आप महीने के 1 और 15 तारीख को क्रोनजोब चला सकते हैं:

15 8 1,15 * * /your/script.sh

जो सप्ताह के दिन की परवाह किए बिना प्रत्येक महीने के पहले और पंद्रहवें दिन सुबह 8:15 बजे तक चलता है।


-2

सप्ताह क्षेत्र पर 3/2 की व्याख्या से उस कार्य को हर दूसरे वेडनसडे को करना चाहिए - इसके निहितार्थ, लेकिन मुझे लगता है कि यह उचित है।


नहीं, यह बराबर है for(int i=3; i <=3 ; i+=2) {} क्योंकि यह केवल एक बार इसके माध्यम से चल रहा है, इससे कोई फर्क नहीं पड़ता कि "चरण" 1 या 2 है
स्टू

@Stew ने क्या कहा। इसके अलावा, कोई "सप्ताह क्षेत्र" नहीं है।
रोमन

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