Neustart bei Absturzskriptprüfung

592
Orophix

Ich versuche, ein Shell-Skript zu erstellen, das überprüft, ob zwei verschiedene Prozesse ausgeführt werden, und sie neu zu starten, falls dies nicht der Fall ist. Ich möchte es einfach halten. Ist dies der richtige Weg, weil es nicht so aussieht, als ob der zweite Teil funktioniert ...

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

1 Antwort auf die Frage

0
Kamil Maciorowski

Es gibt einige Probleme:

  • Das Skript kommt nie über das erste hinaus doneund dies ist der Hauptgrund, warum der zweite Teil nicht funktioniert.
  • Es gibt kein Shebang .
  • while true :ist komisch. Beide trueund :sind eingebaute in Bash, beide geben wahr zurück . Sohle while truewäre genug, das gleiche mit while :. Es scheint, Sie wollten ( ? ) Beide Varianten gleichzeitig verwenden, und dieser Code funktioniert sogar, dh er schlägt fehl. Es scheitert nicht, weil dies :nicht ein von mir erwähntes Gebäude ist; es ist ein Argument für den trueBefehl. trueverwirft seine Befehlszeilenargumente. true :oder true almost anythingist äquivalent dazu true, also while true :funktioniert deine Arbeit gerne while true.

Eine Möglichkeit, viele separate Prozesse mit einem Skript neu zu starten, sieht folgendermaßen aus:

#!/bin/bash  trap "kill 0" SIGINT  while :; do process1; done & while :; do process2; done & # ... while :; do processN; done 

Dies führt N whileSchleifen in separaten Shells (N-1 Subshells und Main Shells) aus, sodass jede einzelne Schleife unabhängig voneinander parallel ausgeführt wird. In Ihrem Fall kann das Skript sein:

#!/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 

Die Falle tötet (versucht zu töten) alle Nachkommen dank dieses kill 0Tricks :

Alle Prozesse in der aktuellen Prozessgruppe werden signalisiert