कार्यक्रम को हर x मिनट फिर से शुरू करें?


10

मेरे पास एक उत्परिवर्तित जावा प्रोग्राम है जो एक ओपनसोर्स लाइब्रेरी का उपयोग करता है और इस लाइब्रेरी में कुछ बग हैं जिनके कारण मैंने बग की सूचना दी है लेकिन इसे ठीक होने में समय लगेगा, मुझे इस कार्यक्रम का उपयोग करना जारी रखना होगा और जब तक यह होगा हर 2-3 घंटे में यह मेरे लिए काम करेगा। क्या हर x मिनट में प्रोग्राम को पुनरारंभ करने का कोई तरीका है?


3
आप एक स्क्रिप्ट लिख सकते हैं जो हर 2-3 घंटे में कार्य को मार देगा और पुनः आरंभ करेगा।
gt6989b

क्या @ gt6989b के साथ पालन करने के लिए, मैं एक पायथन स्क्रिप्ट लिखूंगा जो केवल लूप और प्रतीक्षा करता है जब तक कि 2-3 घंटे बीत चुके हों, और फिर प्रोग्राम को पुनरारंभ करें। आप पायथन सबप्रोसेस और मॉड्यूल को उपयोगी पा सकते हैं ।
ब्रेकथ्रू

जवाबों:


12

आप अपने में करने की कोशिश कर सकते हैं crontab:

crontab -e

फिर

 11 */3 * * * /usr/bin/pkill -f appli_name; /path/to/appli_name & &>/dev/null

crontabआदेश मतलब:

  • हर 3 घंटे
  • appli_name को मार डालो
  • पृष्ठभूमि में appli_name शुरू करें

यह है कि मैं वर्तमान में इसी तरह के मुद्दे को कैसे हल करता हूं। मैं क्रोन के माध्यम से हर रात 0:00 पर एक निश्चित सॉफ़्टवेयर को पुनरारंभ करता हूं, क्योंकि सॉफ्टवेयर में 4-5 दिनों के बाद अपनी राज्य फ़ाइल को दूषित करने की प्रवृत्ति होती है। मैंने सॉफ्टवेयर को एक सेवा के रूप में स्थापित किया है और फिर service <appname> restart > /dev/null 2>&1वांछित समय पर चलाया है।
डैनियल एंडरसन

2

मेरा सुझाव है कि आप अपने कार्य के लिए पर्यवेक्षक को कॉन्फ़िगर करें। यह प्रक्रिया की निगरानी कर सकता है, यदि यह विफल रहता है, तो पुनरारंभ करें, यह आउटपुट पुनर्निर्देशन और अन्य अच्छी सुविधाएं भी प्रदान करता है। कार्यक्रम शुरू करने के लिए उदाहरण देखें ।


+1, यह एक अधिक "स्वच्छ" समाधान प्रतीत होता है, जिसका विरोध किया गया है crontab(हालाँकि दोनों समाधान ठीक काम करते हैं)। हालाँकि, मुझे लगता है कि सुपरवाइज़र यह सुनिश्चित करने के लिए बेहतर है कि किसी प्रक्रिया को भेजने के लिए कौन से संकेत मिलते हैं और कब (जब भेजना है SIGTERM, और भेजने से पहले कितनी देर तक इंतजार करना है SIGKILL, आदि ...)।
ब्रेकथ्रू

-1

मुझे इस तरह की समस्या है कि मेरी वेबसाइट पर मेरे सभी httpd प्रक्रियाओं का उपयोग करके बॉट्स द्वारा हमला किया जाता है।

मैंने इससे निपटने के लिए एक सरल शेल स्क्रिप्ट बनाई, हर दस minuets की सभी httpd प्रक्रियाओं को मार डाला। (मुझे पता है, यह एक उचित फिक्स नहीं है, लेकिन मैं प्रदाताओं को एक में बदल रहा हूं, जो मुझे उचित फ़ायरवॉल समर्थन देगा, इसलिए मैं अभी कुछ भी एक उचित फिक्स में निवेश नहीं करना चाहता।)

यही है वह जो मेरे द्वारा उपयोग किया जाता है:

while [ 1 ]; do  uptime; killall httpd; psg httpd | wc; sleep 600; done

"Uptime" और "psg httpd | wc" कमांड केवल टर्मिनल पर एक निशान प्रदान करते हैं, और अनावश्यक हैं। "psg" एक फ़ंक्शन है जो बस ps को चलाता है और इसे तर्क के लिए तैयार करता है, इसलिए यह "httpd" प्रक्रिया के उदाहरणों की संख्या को प्रिंट करता है जो चल रहे हैं।

आपके उद्देश्यों के लिए, आपको "हत्यारे" की आवश्यकता है और "600" को सेकंड में बदलकर आप प्रक्रियाओं को मारने के बीच इंतजार करना चाहते हैं।

while [ 1 ]; do killall name_of_executable; sleep 600; done

यदि आप कमांड और मुख्य कमांड स्टॉल को चेन करते हैं, तो जबकि लूप कभी भी जारी नहीं रहेगा। आपको सूची को किसी भी तरह से कांटना होगा, इसलिए यह एक पृष्ठभूमि प्रक्रिया शुरू करता है, जो कि 600 के बाद मुख्य प्रक्रिया को मार देगा
रूबो77
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.