क्रैश होने पर एप्लिकेशन स्क्रिप्ट फिर से चलाएं?


18

मेरे पास कुछ एप्लिकेशन हैं जो मेरे लैपटॉप पर हर समय चलने की आवश्यकता है।

मैं इन एप्लिकेशन को शुरू करने के लिए एक bash स्क्रिप्ट का उपयोग करता हूं। मेरी स्क्रिप्ट में मेरे पास एक लूप है जो इस तरह दिखता है:

while true;
do
    xterm
done

यह एक एप्लिकेशन चलाता है ( xtermइस मामले में) और यदि एप्लिकेशन क्रैश हो जाता है, तो लूप इसे फिर से शुरू करता है।

इसका एक नुकसान है कि इस लूप से कोई "स्वच्छ" निकास नहीं होता है। इसलिए भले ही उपयोगकर्ता का इरादा बंद करना हो xterm, लूप इसे फिर से शुरू करता है।

क्या बैश स्क्रिप्ट से किसी एप्लिकेशन को शुरू करने का एक तरीका है , यह देखें कि क्या यह चल रहा है, यदि स्क्रिप्ट ठीक से बंद हो गई है या उपयोगकर्ता ने इसे ठीक से बंद कर दिया है तो इसे फिर से चलाने के लिए ?

जवाबों:


30

इसे इस्तेमाल करे:

while true; do xterm && break; done

एप्लिकेशन के बाहर निकलने की स्थिति कोड होती है ताकि यदि कुछ ठीक हो जाए तो वह शून्य हो जाता है ... और यदि कुछ गलत हुआ, तो वह दूसरा नंबर निकाल लेता है। यह लोगों को हुक करने और सटीक मुद्दे का पता लगाने की अनुमति देता है। यही दूसरा उत्तर दे रहा है।

&&बस यह जांचता है कि पिछला कमांड शून्य-स्थिति से बाहर निकलने वाला था और यदि यह था, तो लूप को तोड़ देता है। यदि यह दुर्घटनाग्रस्त हो जाता है, तो यह 0 के अलावा कुछ और बाहर फेंक देगा और && ...खण्ड ट्रिगर नहीं करेगा; यह बस वापस चारों ओर लूप जाएगा और चला xterm


6
यह काफी सुरुचिपूर्ण है।
ओली

हम्म .. अन्य तरीके के रूप में अच्छी तरह से:while xterm; do true; done
मूरू

1
@ मुरु: यह मेरे लिए काम करता है:while ! xterm; do :; done
सायरस

1
@ साइरस आह, हाँ। भूल गया !
मुरु

मैंने एक राक्षस बनाया है। मैं इसे कैसे मारूं?
टोनी रूथ

6

इस whileशर्त पर कि आप परीक्षण कर सकते हैं कि बाहर निकलने की स्थिति xtermसफल रही या नहीं, कुछ इस तरह से:

result=1
while [ $result -ne 0 ]; do
    xterm
    result=$?
done

$? चर अंतिम निष्पादित कमांड की निकास स्थिति रखता है।


0

मैं आपको उपयोग करने का सुझाव दूंगा।

एक्सटरम तक; गूंज "कार्यक्रम की स्थिति $ के साथ समाप्त हो गई?" ; किया हुआ

यदि यह मारा जाता है तो यह आपके प्रोग्राम को फिर से चलाएगा।


0

पर्यवेक्षक का उपयोग करने का प्रयास करें इसे चलाने के लिए प्रोग्राम या स्क्रिप्ट को जोड़ना बहुत सरल और आसान है । कम से कम आप की जरूरत के मामले में commandऔर कॉन्फ़िगर करने के लिए programx- अनुभागexitcodes में हो सकता है ।

डिफ़ॉल्ट exitcodes0,2 है तो इसका मतलब है:

पर्यवेक्षक प्रक्रिया को फिर से शुरू करेगा यदि वह एक एक्जिट कोड के साथ बाहर निकलता है जिसे इस सूची में परिभाषित नहीं किया गया है

सामान्य तौर पर यह है कि आप चाहते हैं: स्क्रिप्ट के दुर्घटनाग्रस्त होने या उपयोगकर्ता द्वारा इसे ठीक से बंद करने पर कुछ भी न करें (या स्क्रिप्ट सफल हुई) तो इसे फिर से चलाएं

पहले सरलतम विन्यास का प्रयास करें:

[program:you_app_name]
command=/path/to/you/app

अधिक लचीलेपन के लिए कॉन्फ़िगरेशन फ़ाइल प्रलेखन देखें ।

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