क्या स्लीप कमांड के बिना हर 30 सेकंड में क्रोन जॉब चलाना संभव है?
क्या स्लीप कमांड के बिना हर 30 सेकंड में क्रोन जॉब चलाना संभव है?
जवाबों:
यदि आपके कार्य को बार-बार चलाने की आवश्यकता है, तो क्रोन गलत उपकरण है। इस तथ्य के अलावा कि यह केवल उन नौकरियों को लॉन्च नहीं करेगा जो अक्सर होती हैं, आप कुछ गंभीर समस्याओं का भी जोखिम उठाते हैं यदि लॉन्च के बीच के अंतराल की तुलना में नौकरी को चलने में अधिक समय लगता है। अपने काम को फिर से शुरू करने और लगातार चलाने के लिए फिर से शुरू करें, फिर यदि आवश्यक हो तो क्रॉन से लॉन्च करें (यह सुनिश्चित करते हुए कि यह पहले से ही चल रहा है तो इसे फिर से लॉन्च नहीं करेगा)।
run-oneएक प्रोग्राम सुनिश्चित करने के लिए उपयोग कर सकते हैं / यहां तक कि एक PHP स्क्रिप्ट भी डुप्लिकेट उदाहरण शुरू नहीं कर रहा है। sudo apt-get install run-oneऔर इसे कॉल करेंrun-one <normal command>
लिनक्स कमांड के सबसे रचनात्मक दुरुपयोग के लिए उम्मीदवार :
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 सेकंड से अधिक हो जाएगा, क्योंकि कमांड को लॉन्च करने और निष्पादित करने में लगने वाले समय के कारण । yourprogyourprog- 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। पिछली सामग्री को अधिलेखित किए जाने के बजाए दोहरे से अधिक आउटपुट फ़ाइल को प्रत्येक आह्वान पर फ़ाइल में जोड़ा जाता है।संपादित करें :
संभवतः एक और चीज जिसका दुरुपयोग किया जा सकता है (या शायद यह एक वैध उपयोग है) सिस्टमड टाइमर है।
एक क्रोन प्रतिस्थापन और क्रोन बनाम सिस्टमड टाइमर के रूप में सिस्टमड / टाइमर देखें ।
मैं जल्द ही एक उदाहरण पोस्ट करने की कोशिश करूंगा।
&कमांड को पृष्ठभूमि में चलाने का कारण बनता है, कमांड प्रॉम्प्ट पर तुरंत नियंत्रण लौटाता है। nohupकमांड का उपयोग करने से बैकग्राउंड प्रोसेस (इस मामले में watch) हैंगअप सिग्नल को नजरअंदाज करने का कारण बनता है जो तब भेजा जाता है जब शेल टर्मिनल से बाहर निकलते समय बाहर निकलता है। ...
>/dev/nullत्याग हो जाता है और एक nohup.outफ़ाइल के निर्माण को रोकता है जो अन्यथा तब उत्पन्न होती है जब मानक आउटपुट एक टर्मिनल होता है।
sleep, तो आपको एक लूप लिखना होगा ताकि प्रक्रिया दोहराई जाएगी ( watchक्या यह आपके लिए दोहराता है, जैसा कि करता है cron)। आपको अभी भी nohupऔर की आवश्यकता होगी &। sleepसमय के बहाव के साथ एक अतिरिक्त समस्या होगी। इससे बचने का --preciseविकल्प watch। इसके बिना या sleepलूप में उपयोग करते समय, समय अंतराल के पास कमांड या स्क्रिप्ट को चलाने के लिए समय लगता है, इसलिए प्रत्येक रन बाद में और बाद में मिलता है ...
क्रोन को प्रत्येक मिनट पर जागने के लिए डिज़ाइन किया गया है, इसलिए इसे कुछ हैकिंग के बिना करना संभव नहीं है, उदाहरण के लिए नींद जैसा कि आपने उल्लेख किया है।
* * * * * /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 को खोजें।
without a sleep command
आप इसे थर्ड पार्टी सॉफ्टवेयर के साथ कर सकते हैं।
एक विकल्प जो मेरे लिए अच्छी तरह से काम किया है वह अक्सर क्रोन है
यह मिलीसेकंड परिशुद्धता की अनुमति देता है और यह आपको मौजूदा निष्पादन से बाहर निकलने तक अगले निष्पादन को स्थगित करने का विकल्प देता है।
मुझे कुछ चिंताएँ हैं:
(1) कभी-कभी एक प्रणाली व्यस्त हो जाती है और 30 सेकंड के बिंदु पर चीजों को शुरू नहीं कर सकती है, तो यह संभव है कि एक ही समय में आप एक नौकरी चला रहे हैं दूसरी नौकरी पॉप होगी और फिर आपके पास 2 (या अधिक) नौकरियां हैं चीज़। स्क्रिप्ट के आधार पर, यहाँ कुछ महत्वपूर्ण हस्तक्षेप हो सकता है। इस प्रकार, ऐसी स्क्रिप्ट में कोडिंग में यह सुनिश्चित करने के लिए कुछ कोड होना चाहिए कि दिए गए स्क्रिप्टिंग का केवल एक ही समय चल रहा है।
(२) स्क्रिप्ट में संभवतः बहुत अधिक ओवरहेड हो सकता है, और जितना आप चाहते हैं उससे अधिक सिस्टम संसाधनों का उपभोग कर सकते हैं। यह सच है अगर आप कई अन्य सिस्टम गतिविधियों के खिलाफ प्रतिस्पर्धा कर रहे हैं।
इस प्रकार एक पोस्टर के रूप में इसे रखा गया है, इस मामले में मैं गंभीरता से अतिरिक्त प्रक्रियाओं के साथ एक डेमॉन में डालने पर विचार करूंगा ताकि यह सुनिश्चित हो सके कि यह आपके संचालन के लिए महत्वपूर्ण है।
क्रोन प्रविष्टि:
* * * * * 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कमांड को मारेंएक समाधान, अगर यह आपकी अपनी स्क्रिप्ट के लिए है या यदि आप इसे लपेट सकते हैं:
डेमॉन के निर्माण और निगरानी की तुलना में कम सिरदर्द।
* यदि आप PHP का उपयोग कर रहे हैं, तो clearstatcache () याद रखें।