2009-01-22 16 views
42

मैं जानता हूँ कि मैं कुछ की तरह एक लाइन के साथ क्रॉन में हर पाँच मिनट चला सकते हैं कि:मैं हर "एन" वें मिनट में क्रॉन कैसे चला सकता हूं, जहां एन% 5 == 1?

*/5 * * * * /my/script 

क्या होगा यदि मैं यह 12:00, 12:05, 12:10 पर नहीं चलाना चाहते हैं, लेकिन बल्कि 12:01, 12:06, 12:11, आदि पर? मुझे लगता है कि मैं यह कर सकता हूं:

1,6,11,16,21,26,31,36,41,46,51,56 * * * * /my/script 

... लेकिन यह बदसूरत है। क्या ऐसा करने का एक और शानदार तरीका है?

उत्तर

74
1-56/5 * * * * /my/script 

यह vixiecron पर काम करना चाहिए, मुझे अन्य कार्यान्वयन के बारे में निश्चित नहीं है।

+0

समान वाक्यविन्यास भी fcron द्वारा स्वीकार किया जाता है, जिसमें दो सबसे प्रचलित क्रॉन शामिल होते हैं।मुझे विश्वास नहीं है कि डक्रोन इसका समर्थन करता है, लेकिन यह दुर्लभ है। – ephemient

+0

यह काम करता है !! बहुत बढ़िया .. :) – Mo3z

+0

मैं कैसे बता सकता हूं कि क्रॉन का कौन सा संस्करण उपयोग किया जा रहा है? –

16

अपनी पहली अनुसूची का उपयोग करें:

*/5 * * * * /my/script 

और अपनी स्क्रिप्ट के शुरू से जोड़ें:

sleep 60 

(एक मजाक हाँ, यह है)

+1

मैं मध्यरात्रि से पहले 1 सेकंड पहले प्रक्रिया शुरू करने के लिए इसका एक भिन्नता उपयोग करता हूं। –

+4

आह, नींद की सरासर शक्ति -1--) –

+0

मैं पिछली पंक्ति पढ़ने से पहले माउस को पहले से ही नीचे ले जाने के लिए आगे बढ़ रहा था :) – ymihere

-5

sean.bright का मजाक मिला मुझे सोच रहा है ... क्यों उपयोग नहीं करें ...

* * * * * /my/script 

... और स्क्रिप्ट के भीतर ऐसा करने ...

#!/bin/bash 
export WHEN=`date '+%M'` 
echo $WHEN 
export DOIT=`echo "$WHEN % 5" | bc` 
echo $DOIT 
if [ $DOIT != 0 ] ; then 
    echo "ha ha ha" 
fi 
echo "done" 

... एक kludge ... शायद, लेकिन crontab के रूप में के रूप में बदसूरत है ... मैं नहीं जानता।

+0

क्योंकि आप हर मिनट एक प्रक्रिया चला रहे हैं जो आपको पता है कि कुछ भी उपयोगी नहीं होगा। इसके अलावा, मुझे लगता है कि आपका अगर कथन टूट गया है। ;-) –

+0

अगर कथन फिक्स्ड। – dacracot

+0

एक ओर यह बेहतर है। दूसरी तरफ, यह पता लगाने के लिए कि क्या आपको कुछ नहीं करना चाहिए, यह और अधिक काम किया जा रहा है। –

-1

मैं एक नई स्क्रिप्ट "देरीस्टार्ट" तैयार करूंगा जो पहले पैरामीटर और स्क्रिप्ट को शेष के रूप में चलाने के लिए नींद की अवधि लेता है। मैं स्क्रिप्ट के साथ लाइन के लिए क्रॉन्टाब लाइन की जांच करूँगा और लाइन पर टिप्पणी नहीं होने पर ही स्क्रिप्ट शुरू कर दूंगा। इससे यह पुन: प्रयोज्य हो जाता है, और पीएस स्क्रिप्ट की रिपोर्ट नहीं करेगा जब यह वास्तव में नहीं है।

#!/bin/bash 
sleeptime=$1 
sleep ${sleeptime} 
shift 
if (! crontab -l | grep -e '#.+delaystart '${sleeptime} $*) then 
    $* 
fi 
0

यह काफी पुराना विषय है, हालांकि अब इतना समय बीत चुका है कि अब कुछ और विकल्प हैं। इनमें से एक क्रॉन का उपयोग नहीं करना है, और सिस्टम टाइमर का उपयोग करना है। टाइमर के इन प्रकार के अभ्यस्त जारी रहती है: इन का उपयोग करके आप अन्य विकल्पों में से बहुत सारे के साथ सेकंड की तुलना में अधिक विवरण के स्तर को

अधिक जानकारी https://wiki.archlinux.org/index.php/Systemd/Timers

जैसे एक सहारा आदेश

# systemd-run --on-calendar="*:1/5" /bin/touch /tmp/foo2 
Running timer as unit run-r31335c4878f24f90b02c8ebed319ca60.timer. 
Will run service as unit run-r31335c4878f24f90b02c8ebed319ca60.service. 

# systemctl status run-r31335c4878f24f90b02c8ebed319ca60.timer 
● run-r31335c4878f24f90b02c8ebed319ca60.timer - /bin/touch /tmp/foo2 
    Loaded: loaded 
Transient: yes 
    Drop-In: /run/systemd/system/run-r31335c4878f24f90b02c8ebed319ca60.timer.d 
      └─50-Description.conf, 50-OnCalendar.conf, 50-RemainAfterElapse.conf 
    Active: active (waiting) since Wed 2017-10-25 09:05:13 UTC; 40s ago 

# ls -l /tmp/foo* 
-rw-r--r-- 1 root root 0 Oct 25 09:06 /tmp/foo2 

# sleep 300; ls -l /tmp/foo* 
-rw-r--r-- 1 root root 0 Oct 25 09:11 /tmp/foo2 

# date; ls -l /tmp/foo2 
Wed Oct 25 09:21:42 UTC 2017 
-rw-r--r-- 1 root root 0 Oct 25 09:21 /tmp/foo2 

संपादित चलाने के लिए यहाँ उपलब्ध है देता है रीबूट पर, यदि आप चाहते हैं कि आप यह सुनिश्चित करना चाहते हैं कि आप एक उचित सेवा फ़ाइल उत्पन्न करते हैं, प्रासंगिक ऑनकेंडर लाइन

संबंधित मुद्दे