सिंटैक्स त्रुटि के अलावा पहले से ही इंगित किया गया है, यह सुनिश्चित करने का एक लुभावना तरीका है कि एक प्रक्रिया जिंदा रहती है।
सबसे पहले, आपको पता होना चाहिए कि आपका प्रोग्राम पहले स्थान पर क्यों मर रहा है; यह स्क्रिप्ट एक बग ठीक नहीं करता है, यह एक को छिपाने की कोशिश करता है।
दूसरा, यदि यह इतना महत्वपूर्ण है कि कोई प्रोग्राम चल रहा है, तो आप उम्मीद क्यों करते हैं कि (कम से कम एक बार पहले) बग्गी शेल स्क्रिप्ट काम करेगी? एक सिस्टम सुविधा का उपयोग करें जो विशेष रूप से सर्वर प्रक्रियाओं को पुनरारंभ करने के लिए डिज़ाइन किया गया है। यदि आप कहते हैं कि आप किस प्लेटफ़ॉर्म का उपयोग कर रहे हैं और आपकी सर्वर प्रक्रिया की प्रकृति है। मैं अधिक ठोस सलाह दे सकता हूं।
टिप्पणी करने के लिए जवाब में कहा:
ज़रूर, वहाँ इंजीनियरिंग मजबूरियों हैं, लेकिन के रूप में ओ पी ओ पी में बताया गया है, वहाँ अभी भी एक समाधान पर इस प्रयास में एक बग है:
मुझे पता है कि मुझे प्रक्रिया नाम द्वारा जांचना चाहिए और आईडी को संसाधित नहीं करना चाहिए, क्योंकि प्रक्रिया कूद सकती है और आईडी ले सकती है।
तो अब आपको एक पीआईडी ट्रैकिंग स्क्रिप्ट के साथ छोड़ दिया गया है, न कि प्रक्रिया "नानी"।हालांकि संभावना है कि छोटे हैं, स्क्रिप्ट अब यह खड़ा के रूप में एक दस दूसरा खिड़की जिसमें
- "नजर रखी" प्रक्रिया विफल
- मैं अपने सप्ताह भर चलने Emacs प्रक्रिया है जो एक ही पीआईडी
- पकड़ लेता है शुरू किया है नानी स्क्रिप्ट इस बात से अनजान है कि इसका आश्रित
स्क्रिप्ट केवल छोटी नहीं है, यह अमान्य है क्योंकि यह मानता है कि पीआईडी एक प्रक्रिया के स्थिर पहचानकर्ता हैं। ऐसे तरीके हैं जिन्हें शैल स्क्रिप्ट स्तर पर भी बेहतर तरीके से संभाला जा सकता है। सबसे आसान यह है कि स्क्रिप्ट से perl
के निष्पादन को कभी भी अलग न करें क्योंकि स्क्रिप्ट सबप्रोसेस देखने के अलावा कुछ और नहीं कर रही है। उदाहरण के लिए:
while true ; do
if perl program_name.pl ; then
echo "program_name terminated normally, restarting"
else
echo "oops program_name died again, restarting"
fi
done
जो न केवल छोटे और सरल है, लेकिन यह वास्तव में शर्त यह है कि तुम सच में में रुचि रखते हैं के लिए ब्लॉक: पर्ल कार्यक्रम के रन राज्य। मूल स्क्रिप्ट बार-बार रन स्टेटस स्थिति (पीआईडी) का खराब प्रॉक्सी संकेत जांचती है और इसलिए इसे गलत मिल सकती है। और, चूंकि इस नानी लिपि का पूरा उद्देश्य दोषों को संभालना है, इसलिए यह खराब होगा अगर यह डिजाइन द्वारा खुद को दोषपूर्ण था।
बहुत बढ़िया, मैंने आज शैल स्क्रिप्टिंग शुरू कर दी और यह मुझे पागल कर रहा था। मैं किसी भी दिन किसी भी दिन जटिल रूप से जटिल पर एक सरल वाक्यविन्यास मुद्दा ले जाऊंगा। एक बार फिर धन्यवाद। पीएस: आपने इतनी जल्दी उत्तर दिया (मैंने पोस्ट किया, बाथरूम में गया, और एक समाधान पर वापस आ गया लव लव ओवर!) कि मुझे अपने उत्तर को सही के रूप में जांचने के लिए इंतजार करना है, लेकिन मैं थोड़ी देर में रहूंगा। – user387049
@ user387049: जॉन कुगलमैन का जवाब आपके खोल ज्ञान के लिए अच्छा है। हालांकि आपकी स्क्रिप्ट एक कार्यक्रम की निगरानी का एक खराब तरीका है; [एमएसडब्ल्यू का जवाब] (http://stackoverflow.com/questions/3304559/how-to-use-a-shell-script-to-supervise-a-faulty-program/3304634#3304634) बताते हैं क्यों। एक मौजूदा पर्यवेक्षक कार्यक्रम का उपयोग करना एक और अधिक मजबूत समाधान होगा, जैसे कि [जोनास] (http://stackoverflow.com/questions/3304559/how-to-use-a-shell-script-to- निगरानी एक दोषपूर्ण-कार्यक्रम/3306727 # 3306727)। – Gilles