बंद होने पर एप्लिकेशन को स्वचालित रूप से पुनरारंभ करें


10

मेरे पास एक सर्वर एप्लिकेशन है जो मैं चाहता हूं कि जब भी कंप्यूटर चल रहा हो और आमतौर पर यह मामला हो, तो कभी-कभी सिवाय इसके कि मुझे यह अपने आप बंद हो जाए।

क्या कोई बैट या स्क्रिप्ट है जिसे मैं एप्लिकेशन को मॉनिटर करने के लिए चला सकता हूं और इसे फिर से बंद करना चाहिए?


किस प्रकार का अनुप्रयोग, और यह सामान्य रूप से कैसे शुरू होता है? एक सेवा के रूप में, रजिस्ट्री में एक रन कमांड के रूप में, या स्टार्टअप फ़ोल्डर में?
15

रजिस्ट्री रन कमांड। विकल्प '-स्टार्ट' के साथ।
सिड

यदि आप पहले से ही चल रहे ऐप के साथ उस कमांड को चलाते हैं तो वर्तमान में क्या होता है?
KCotreau

कुछ भी तो नहीं। आदेश पहचानता है कि एप्लिकेशन पहले से चल रहा है।
सिड

जवाबों:


12

यह हमेशा काम नहीं करता है (यह इस बात पर निर्भर करता है कि प्रोग्राम अपने आप कैसे लोड होता है), लेकिन आम तौर पर आप इस तरह एक बैच फ़ाइल बना सकते हैं:

@Echo off
:Start
NotePad
echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 
echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

goto Start

मैंने एक उदाहरण के रूप में नोटपैड का उपयोग किया है।

रेखाएं

echo Press Ctrl-C if you don't want to restart automatically
ping -n 10 localhost

फिर से शुरू होने से पहले उपयोगकर्ता को प्रक्रिया को समाप्त करने का मौका देने के लिए बस (10 सेकंड का) देरी है।

रेखा

echo Program terminated at %Date% %Time% with Error %ErrorLevel% >> c:\logs\program.log 

जरूरत नहीं है, लेकिन प्रोग्राम को फाइल में बंद करने पर हर बार लॉग इन किया जाएगा, इसलिए समस्या का निदान करने के लिए यह उपयोगी हो सकता है। ErrorLevel आपको ज्यादा नहीं बता सकता है, लेकिन एक प्रोग्राम को 0 पर लौटना माना जाता है यदि यह सामान्य रूप से बंद हो, और एक गैर -अगर संदेश नहीं तो यह नहीं

ध्यान दें, आप उल्लेख करते हैं कि यदि आप पहले से ही चल रहे हैं तो आप कुछ भी नहीं करते हैं। आमतौर पर इसका मतलब है कि आवेदन शुरू होता है, पता लगाता है कि एक और प्रतिलिपि पहले से ही चल रही है और तुरंत बंद हो रही है। यदि ऐसा है, और आपका प्रोग्राम इस बैच फ़ाइल को शुरू करने से पहले चल रहा है, तो बैच राउंड लूप करेगा और आपके प्रोग्राम को दस सेकंड में शुरू करने का प्रयास करेगा।


"तब बैच राउंड लूप करेगा और हर दस सेकंड में अपना प्रोग्राम शुरू करने का प्रयास करेगा।" क्या यह खराब चीज़ है?
posfan12

धन्यवाद!! थोड़ी सी कॉपी और पेस्ट 12:52 बजे, और मैं बिना सोए (बहुत ज्यादा) चिंता के जा सकता हूं कि सुबह क्या मिलेगा (या नहीं मिला)। उह। नींद के बाद सुबह।
स्पाइक 0xff

2

उपरोक्त आपके उत्तरों के आधार पर, मेरा सुझाव है कि आप उस कमांड को एक बैच फ़ाइल में रखें, फिर उस बैच फ़ाइल को एक निर्धारित कार्य के रूप में हर मिनट में चलाने के लिए सेट करें। वस्तुतः इसके साथ कोई उपरिव्यय नहीं जुड़ा है, और यह सुनिश्चित करता है कि आपकी प्रक्रिया इस बात की परवाह किए बिना हो कि क्या आप इसे महसूस करने के लिए आस-पास हैं या नहीं।


यह मुझे एक त्वरित अनाड़ी और अक्षम समाधान के रूप में प्रभावित करता है, हालांकि जल्दी। क्या एक ही छोर पर शायद अधिक उपयुक्त साधन है? आपकी सहायता के लिए धन्यवाद!!!
सिड

सिड, जैसा कि मैंने कहा, ओवरहेड बहुत कम है, और ऐसा करना आसान है। यदि आप यह देखने के लिए कि यह चल रहा है, और फिर इसे फिर से शुरू करने के लिए जाँच करने के लिए किसी चीज़ को कोड करने का तरीका चाहते हैं, तो इसे बेझिझक महसूस करें, लेकिन मैं लंबे समय से सकारात्मक परिणामों के साथ ऐसा कर रहा हूं। यह एक आम तरीका है जब आप आवेदन करते हैं, आमतौर पर एक सर्वर पर, जो चलना बंद हो जाता है।
KCotreau

अब तक की सबसे आसान विधि। और कोई ओवरहेड नहीं है।
सर्फस

2

मुझे लगता है कि इस सवाल का सही जवाब इस बात पर निर्भर करता है कि आप इसे क्यों करना चाहते हैं। क्या आप आकस्मिक शट डाउन को हल करने की कोशिश कर रहे हैं? मशीन के उपयोगकर्ताओं द्वारा लापरवाही से "दुर्भावनापूर्ण" शट-डाउन को रोकें (जैसे निगरानी सॉफ्टवेयर बंद करने वाले कर्मचारी)? गंभीर और कुशल दुर्भावनापूर्ण हमले को रोकें? क्या आप ख़ुद मालवेयर लिखने की कोशिश कर रहे हैं (किस स्थिति में कृपया बंद करें ;-))

साथ ही, जैसा कि अन्य टिप्पणीकारों ने उल्लेख किया है, यदि आप एक Windows सेवा (उदाहरण के लिए) लिखेंगे तो यह भिन्न होगी

व्यक्तिगत रूप से, मैं शायद एक दूसरा आवेदन लिखकर और उसी तरह शुरू करूँगा। क्या दोनों अनुप्रयोग एक-दूसरे के लिए समय-समय पर स्कैन करते हैं और यदि आवश्यक हो तो पुनः आरंभ करें - सुनिश्चित करें कि आप आवेदन के लिए एक आसान तरीका प्रदान करते हैं, हालांकि यह वैध रूप से बंद है!

उस ने कहा, और आपकी टिप्पणी "कभी-कभी मैं इसे अपने आप बंद कर पाऊंगा" मैंने कहा कि मैं यह जानने की कोशिश कर रहा हूं कि क्यों बंद किया गया था ...


मैं एक मीडिया सर्वर के रूप में कंप्यूटर का उपयोग करता हूं और आपत्तिजनक एप्लिकेशन mediaserver.exe है। इसके बारे में कुछ भी दुर्भावनापूर्ण नहीं है। मैं किसी भी परिदृश्य को बंद नहीं कर सकता, जिसे मैं आवेदन बंद करना चाहता / चाहती हूं, लेकिन अगर मुझे लगता है, तो कोई कारण नहीं होगा कि मैं स्क्रिप्ट या बल्ले को पहले नहीं रोक सकती। इसके अलावा, मैं सॉफ्टवेयर लिखने में सक्षम नहीं हूं, लेकिन मैं बल्लेबाजी फाइलों से परिचित हूं। यानी मैं एक नॉब हूं।
सिड

माफी - कि मुझे लगता है कि मैं "प्रोग्रामर" समूह में था और आप स्वयं एप्लिकेशन लिखेंगे :-) अनाड़ी जैसा कि मुझे लगता है कि मैं "निर्धारित कार्य" दृष्टिकोण का सुझाव दूंगा @KCotreau
स्टीव

2

आप ReStartMe 2.0 [ मिरर ] नामक एक कार्यक्रम का उपयोग कर सकते हैं :

प्रक्रियाओं के लिए मॉनिटर और बंद होने पर उन्हें पुनरारंभ करता है।


-1

यह बेहतर है! यह कुछ कोड है जो मैं एक मिनीटेस्ट गेम सर्वर के लिए उपयोग कर रहा हूं उसे एक .bat फ़ाइल पर सहेजा जाना चाहिए

@echo off
rem This is a comment line
rem This one is a comment too
rem Following line ensures the working directory is searched in C:
C:
rem Join the correct directory, where the server stuff lies in:
cd "C:\Users\morenavaj\Documents\minetest-0.4.16-win64 - Lone_Wolf\"
:love_spaghetti_code
bin\server.lnk --config minetest.conf ^
            --worldname "Land of Blockheads" ^
            --gameid minetest_game ^
            --port 30000 ^
            --logfile bin/debug.txt

echo Restarting server....
goto love_spaghetti_code

echo Done (this should never, ever, happen)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.