क्रैश स्क्रिप्ट चेक पर पुनः प्रारंभ करें


0

मैं एक शेल स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो यह देखने के लिए जांचती है कि क्या 2 अलग-अलग प्रक्रियाएं चल रही हैं और यदि वे नहीं हैं तो उन्हें फिर से शुरू करें। मैं बस इसे सरल रखना चाहता हूं। क्या यह सही तरीका है क्योंकि यह नहीं लगता है कि दूसरा भाग काम कर रहा है ...

trap "exit" SIGINT

while true :
do
  ./stream.sh
  echo "Stream has Crashed"
done


trap "exit" SIGINT

while true :
do
  ./current_song.sh
  echo "Current Song has Crashed"
done

जवाबों:


0

कुछ मुद्दे हैं:

  • स्क्रिप्ट कभी भी पहले से आगे नहीं बढ़ doneपाती है और यही मुख्य कारण है कि दूसरा भाग काम नहीं कर रहा है।
  • कोई शेबंग नहीं है ।
  • while true :अजीब है। दोनों trueऔर :बाश में निर्मित हैं, दोनों सच लौटते हैं । एकमात्र while trueपर्याप्त होगा, उसी के साथ while :। यह आप चाहते थे लगता है ( ? एक ही समय में दोनों वेरिएंट और कोड के इस टुकड़े भी "काम", यानी यह असफल नहीं होता है उपयोग करने के लिए)। यह विफल नहीं है क्योंकि यह :तुम्हारा एक बिलिन नहीं है जिसका मैंने उल्लेख किया है; यह trueकमांड का तर्क है । trueअपने कमांड लाइन तर्कों को छोड़ देता है। true :या true almost anythingइसके समतुल्य है true, इसलिए आपके while true :कार्य जैसे हैं while true

एक स्क्रिप्ट से कई अलग-अलग प्रक्रियाओं को पुनरारंभ करने का एक तरीका इस प्रकार है:

#!/bin/bash

trap "kill 0" SIGINT

while :; do process1; done &
while :; do process2; done &
# ...
while :; do processN; done

यह एन whileलूप्स को अलग-अलग शेल (N-1 सबशेल और मुख्य शेल) में निष्पादित करता है , इसलिए हर एक लूप समानांतर, स्वतंत्र रूप से चलता है। आपके मामले में स्क्रिप्ट हो सकती है:

#!/bin/bash

trap "kill 0" SIGINT

while :
do
   ./stream.sh
   echo "Stream has Crashed"
done &

while :
do
   ./current_song.sh
   echo "Current Song has Crashed"
done

जाल इस kill 0चाल के लिए धन्यवाद सभी वंशज को मारने की कोशिश करता है :

वर्तमान प्रक्रिया समूह की सभी प्रक्रियाएँ संकेतित हैं

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