सवाल क्या मैं हर मिनट की तुलना में एक क्रॉन नौकरी अधिक बार चला सकता हूं?


क्या नींद कमांड के बिना हर 30 सेकंड में क्रॉन नौकरी चलाने के लिए संभव है?


39
2017-08-02 20:48


मूल


आपका इरादा क्या है? इस के लिए उपयोग करने के लिए सही उपकरण cron है? - Manuel Faux
अच्छा प्रश्न। - Preet Sangha
उदाहरण के लिए, मैं वर्तमान में मूल पृष्ठभूमि छवि स्विचर (उपनिर्देशिका में डाइविंग नहीं) की सीमाओं को रोकने के लिए, मेरी डेस्कटॉप पृष्ठभूमि तस्वीर बदलने के लिए क्रॉन का उपयोग कर रहा हूं। अगर मैं प्रति मिनट एक बार से अधिक बार स्विच करना चाहता था, तो मैं इस क्रॉन सीमा में भाग लेगा। (हालांकि मूल बीजी स्विचर में एक ही सीमा है) - donquixote


जवाब:


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


38
2017-08-02 21:05



भाग "यदि लॉन्च के बीच अंतराल की तुलना में नौकरी चलाने में अधिक समय लगता है तो आपको कुछ गंभीर समस्याएं भी आती हैं।" यह सच नहीं है और यदि यह होता है तो यह उन नौकरियों के लिए समान रूप से लागू होगा जो उस मामले के लिए हर 5 मिनट, हर घंटे या हर महीने चलते हैं। उस समस्या में समाधान हैं (एक पिडफाइल का उपयोग करना या जो भी हो और यह जांच कर लें कि नौकरी पहले से चल रही है या नहीं)। तो मुद्दा यह है कि क्रॉन सिर्फ उस आवृत्ति की अनुमति नहीं देगा, लेकिन यह कहना गलत है कि एक मिनट से भी कम समय में कार्य को निष्पादित करने में आंतरिक रूप से कुछ गलत है। - matteo
मेरा मतलब था कि अगर आप एक पिडफाइल का उपयोग नहीं करते हैं। यदि आपका काम हर एक्स मिनट चलाता है, और खत्म होने के लिए X मिनट से अधिक समय लेता है, तो आप नौकरियों के ढेर के साथ समाप्त हो जाएंगे। यदि आपका काम किसी प्रकार के संसाधन (सीपीयू, नेटवर्क / डिस्क बैंडविड्थ इत्यादि) द्वारा भी सीमित है, तो एक समय में और अधिक चलने से इसे खत्म करने में और अधिक समय लगेगा, और अंततः आपका कंप्यूटर एक थ्रैशिंग गड़बड़ में बदल जाएगा। - duskwuff
आप उपयोग कर सकते हैं run-one एक प्रोग्राम सुनिश्चित करने के लिए / यहां तक ​​कि एक PHP स्क्रिप्ट एक डुप्लिकेट उदाहरण शुरू नहीं कर रहा है। sudo apt-get install run-one और इसे बुलाओ run-one <normal command> - kouton
जैसे ही उत्तर नीचे दिए गए उत्तर के रूप में, थोड़ा सा हैकिस के बावजूद यह बहुत संभव है। तुम गलत क्यों कर रहे हो !!!! यहां स्वीकृत उत्तर, जब यह सवाल का जवाब नहीं देता है? - Someone
@ मंट्रियर क्योंकि प्रश्न के लेखक ने इसे उपयोगी पाया और इसे स्वीकार किए गए उत्तर के रूप में चिह्नित किया? :) लेकिन गंभीरता से, हालांकि, आप पहले से ही समस्या की पहचान कर चुके हैं: कई अन्य समकालीन उत्तरों ने हैकिश समाधान प्रस्तावित किए जो उत्पादन प्रणाली में उपयोग करने के लिए मूर्ख नहीं होंगे। (साथ ही, ध्यान रखें कि अन्य कई उत्तरों केवल प्रश्न पूछने के कुछ साल बाद दिखाए गए थे, इसलिए वे अभी तक स्वीकार करने के लिए उपलब्ध नहीं थे!) - duskwuff


के लिए उम्मीदवार सबसे रचनात्मक  गलत इस्तेमाल लिनक्स कमांड का:

nohup watch -n 30 --precise yourprog >/dev/null &

अगर yourprog के होते हैं:

date +%M.%S.%N >> yourprog.out

फिर yourprog.out ऐसा लग सकता है:

50.51.857291267
51.21.840818353
51.51.840910204
52.21.840513307
52.51.842455224
53.21.841195858
53.51.841407587
54.21.840629676

परिशुद्धता का एक बहुत अच्छा स्तर इंगित करता है।

आदेश के कुछ हिस्सों की व्याख्या यहां दी गई है:

  • nohup - यह उस आदेश को रखता है जो इसका अनुसरण करता है, watch इस मामले में, जब टर्मिनल निकलता है तो बाहर निकलने से।
  • watch - यह प्रोग्राम बार-बार एक आदेश चलाता है। आम तौर पर कमांड से आउटपुट का पहला स्क्रीनफुल हर बार प्रदर्शित होता है watch आदेश चलाता है।
  • -n 30 - अंतराल जिस पर आदेश चलाने के लिए। इस मामले में यह हर तीस सेकंड है।
  • --precise - इस विकल्प के बिना, watch आदेश चलाता है बाद  मध्यान्तर सेकंड। इसके साथ, कमांड की प्रत्येक शुरुआत शुरू करना  पर यदि संभव हो तो अंतराल। यदि इस विकल्प को उदाहरण में निर्दिष्ट नहीं किया गया था, तो समय को बाद में और बाद में 30 सेकंड से अधिक समय तक लॉन्च करने और आदेश को निष्पादित करने के समय के दौरान प्राप्त किया जाएगा (yourprog)।
  • yourprog - कार्यक्रम या कमांड लाइन के लिए watch निष्पादन हेतु। यदि कमांड लाइन में शैल के लिए विशेष वर्ण होते हैं (जैसे स्पेस या अर्धविराम) इसे उद्धृत करने की आवश्यकता होगी।
  • >/dev/null - कम से कम कमांड के आउटपुट को रीडायरेक्ट करने से रीडायरेक्ट करता है watch एक फाइल के लिए, /dev/null। वह फ़ाइल उस पर लिखे गए किसी भी डेटा को त्याग देती है। यह आउटपुट को स्क्रीन पर लिखे जाने से रोकता है या तब से nohup इसका उपयोग किया जा रहा है, यह आउटपुट को फाइल में भेजे जाने से रोकता है nohup.out
  • & - द watch आदेश पृष्ठभूमि में चलाया जाता है और नियंत्रण टर्मिनल या मूल प्रक्रिया में वापस कर दिया जाता है।

ध्यान दें कि nohup, आउटपुट की रीडायरेक्शन और & पृष्ठभूमि नियंत्रण ऑपरेटर के लिए विशिष्ट नहीं हैं watch

उदाहरण का एक स्पष्टीकरण यहां दिया गया है yourprog स्क्रिप्ट:

  • date - वर्तमान तारीख और / या समय आउटपुट। यह उन्हें भी सेट कर सकता है।
  • +%M.%S.%N - यह आउटपुट प्रारूप के लिए निर्दिष्ट करता है date उपयोग करने के लिए। %M वर्तमान मिनट है, %S वर्तमान दूसरा और है %N वर्तमान नैनोसेकंद है।
  • >> yourprog.out - यह के आउटपुट को रीडायरेक्ट करता है date एक फ़ाइल को आदेश दिया जाता है yourprog.out। पिछली सामग्री को ओवरराइट किए जाने के बजाए प्रत्येक आमंत्रण पर फ़ाइल में आउटपुट को जोड़ने के लिए दो गुना अधिक होता है।

संपादित करें:

शायद एक और चीज जिसका दुरुपयोग किया जा सकता है (या शायद यह वैध उपयोग है) systemd टाइमर है।

देख एक क्रॉन प्रतिस्थापन के रूप में systemd / टाइमर तथा क्रोन बनाम systemd टाइमर

मैं जल्द ही एक उदाहरण पोस्ट करने की कोशिश करूंगा।


34
2017-08-16 13:58



मैं शुद्ध गाल के लिए +1 दे रहा हूँ - Matt Simmons
इस जवाब के साथ थोड़ा और स्पष्टीकरण होना अच्छा लगेगा। नोहप कमांड मेरे लिए नया है। इंटरनेट मुझे बताता है कि यह हैंगअप सिग्नल को अनदेखा करना है। जो अभी भी मुझे उलझन में छोड़ देता है। - donquixote
@donquixote: यह पहचानना महत्वपूर्ण है कि मेरे उत्तर में पूरी तरह से आदेश एक अनुशंसित काम नहीं है, इसलिए "दुरुपयोग" शब्द का उपयोग। हालांकि, आपके लिए चीजों को स्पष्ट करने के लिए थोड़ी सी उपयोगी तकनीकें शामिल हैं, इसलिए मैं कुछ का वर्णन करने की कोशिश करूंगा। & कमांड प्रॉम्प्ट पर नियंत्रण लौटने, कमांड को पृष्ठभूमि में चलाने का कारण बनता है। का उपयोग करते हुए nohup आदेश पृष्ठभूमि की प्रक्रिया का कारण बनता है (इस मामले में watch) हैंगअप सिग्नल को अनदेखा करने के लिए जो भेजा जाता है जब खोल टर्मिनल को बंद करते समय बाहर निकलता है। ... - Dennis Williamson
... का उपयोग कर आउटपुट रीडायरेक्टिंग >/dev/null आउटपुट को त्यागने का कारण बनता है और ए के निर्माण को रोकता है nohup.out फ़ाइल जो मानक आउटपुट टर्मिनल होने पर अन्यथा बनाई जाएगी। - Dennis Williamson
@donquixote: अब से केवल 30 सेकंड, हर 30 सेकंड में। बाकी को क्रोन-जैसी होने के लिए पृष्ठभूमि में अनुपयुक्त होना है। यदि आप उपयोग करना चाहते थे sleep, आपको एक लूप लिखना होगा ताकि प्रक्रिया दोहराएगी (watch यह आपके लिए दोहराता है, जैसा करता है cron)। आपको अभी भी आवश्यकता होगी nohup तथा &। के साथ एक जोड़ा समस्या sleep समय बहाव होगा। --precise का विकल्प watch इससे बचाता है इसके बिना या उपयोग करते समय sleep एक लूप में, समय अंतराल में कमांड या स्क्रिप्ट को चलाने के लिए समय लगता है ताकि प्रत्येक रन बाद में और बाद में हो ... - Dennis Williamson


क्रॉन को हर मिनट उठने के लिए डिज़ाइन किया गया है, इसलिए कुछ हैकिंग के बिना इसे करना संभव नहीं है, उदाहरण के लिए आपके जैसा उल्लेख किया गया है।


14
2017-08-02 20:53





* * * * * /path/to/program
* * * * * sleep 30; /path/to/program

अपने प्रोग्राम में कुछ लिखना न भूलें ताकि यह पिछला उदाहरण पहले से चल रहा हो।

#!/bin/sh

if ln -s "pid=$$" /var/pid/myscript.pid; then
  trap "rm /var/pid/myscript.pid" 0 1 2 3 15
else
  echo "Already running, or stale lockfile." >&2
  exit 1
fi

बेशक, यह अभी भी विफलता के लिए एक बहुत ही छोटा मौका छोड़ देता है, इसलिए अपने पर्यावरण पर लागू एक बेहतर समाधान के लिए Google पर खोजें।


9
2017-12-16 19:32



यह पूछा गया है: without a sleep command - philippe
इस प्रश्न को ढूंढने वाले अन्य आगंतुकों को परवाह नहीं है कि नींद कमांड का उपयोग किया जाता है :) - donquixote


आप इसे थर्ड पार्टी सॉफ़्टवेयर के साथ कर सकते हैं।

एक विकल्प जिसने मेरे लिए अच्छा काम किया है बार-बार-क्रॉन

यह मिलीसेकंद परिशुद्धता की अनुमति देता है और यह आपको अगले निष्पादन को तब तक स्थगित करने का विकल्प देता है जब तक कि वर्तमान में बाहर निकल न जाए ..


8
2017-10-30 05:11



बार-बार-क्रॉन ने भी हमारे लिए अच्छा काम किया है और हमारे कई उत्पादन प्रणालियों को शक्ति देता है। हमें इसके साथ कोई समस्या नहीं है। - Homer6


मुझे कुछ चिंताएं होंगी:

(1) कभी-कभी एक प्रणाली व्यस्त हो जाती है और 30 सेकंड बिंदु पर चीजों को ठीक से शुरू नहीं कर सकती है, तो यह संभव है कि एक ही समय में आप एक नौकरी चला रहे हों, एक और नौकरी पॉप हो जाएगी और फिर आपके पास 2 (या अधिक) नौकरियां होंगी चीज़। लिपि के आधार पर, यहां कुछ महत्वपूर्ण हस्तक्षेप हो सकता है। इस प्रकार, इस तरह की एक स्क्रिप्ट में कोडिंग में यह सुनिश्चित करने के लिए कुछ कोड होना चाहिए कि दिए गए स्क्रिप्टिंग का केवल एक उदाहरण एक ही समय में चल रहा है।

(2) लिपि में संभवतः बहुत अधिक ओवरहेड हो सकता है, और आप जितना चाहें उतना सिस्टम संसाधन उपभोग कर सकते हैं। यह सच है यदि आप कई अन्य सिस्टम गतिविधियों के खिलाफ प्रतिस्पर्धा कर रहे हैं।

इस प्रकार एक पोस्टर ने इसे रखा है, इस मामले में मैं गंभीरता से अतिरिक्त प्रक्रियाओं के साथ चलने वाले डेमॉन डालने पर विचार करता हूं ताकि यह सुनिश्चित किया जा सके कि यह आपके परिचालनों के लिए महत्वपूर्ण महत्व है।


2
2017-08-02 21:26





एक समाधान, यदि यह आपकी अपनी स्क्रिप्ट के लिए है या यदि आप इसे लपेट सकते हैं:

  1. प्रारंभ समय प्राप्त करें और याद रखें।
  2. यदि एक लॉक फ़ाइल, जिसे आप बाद में स्पर्श करेंगे, मौजूद है और स्क्रिप्ट 60 सेकंड के लिए नहीं चल रही है, एक सेकंड प्रतीक्षा करें और फिर से जांचें। (उदाहरण के दौरान / नींद) *
  3. अगर 60 सेकंड के बाद लॉक फ़ाइल अभी भी मौजूद है, तो स्टेल लॉक चेतावनी से बाहर निकलें।
  4. लॉक फ़ाइल को स्पर्श करें।
  5. जबकि स्क्रिप्ट 60 सेकंड के लिए नहीं चल रही है, वांछित नींद की अवधि के साथ अपना वास्तविक कार्य लूप करें।
  6. लॉक फ़ाइल हटाएं।
  7. बारीक क्रॉन के रूप में जोड़ें।
  8. बॉब तुम्हारे चाचा हैं।

एक डेमॉन के निर्माण और निगरानी की तुलना में सिरदर्द से कम।

* यदि आप PHP का उपयोग कर रहे हैं, तो clearstatcache () को याद रखें।


0
2018-05-23 21:31





इस कार्य के लिए मेरा सबसे सरल और पसंदीदा समाधान:

क्रॉन प्रविष्टि:
* * * * * flock -w0 /path/to/script /path/to/script

स्क्रिप्ट:
while true;do echo doing something; sleep 10s;done

आलसी विकल्प: :)

* * * * * flock -w0 /path/to/log watch -n 10 echo doing >> /path/to/log

या

* * * * * flock -w0 /path/to/log watch -n 10 /path/to/script

पेशेवरों

  • का उपयोग flock आदेश एक ही समय में कई उदाहरणों से स्क्रिप्ट चलाने से बचाता है। ज्यादातर मामलों में यह बहुत महत्वपूर्ण हो सकता है।
  • flock तथा watch आदेश अधिकांश लिनक्स इंस्टॉल पर उपलब्ध है

विपक्ष

  • इस तरह की "सेवा" को रोकने के लिए दो कदमों की आवश्यकता है
    • क्रॉन प्रविष्टि पर टिप्पणी करें
    • लिपि या मार डालो watch आदेश

0
2017-10-17 13:11



क्या कोई व्यक्ति इसे लिनक्स नौसिखिया को समझा सकता है - पेशेवरों और विपक्ष के साथ? धन्यवाद .. - a20