Wie stoppt man die Endlosschleife im Bash-Skript?

7

Ich muss die Anwendung alle x Sekunden ausführen, also, solange cron auf diese Weise nicht mit Sekunden arbeitet, habe ich ein Bash-Skript mit Endlosschleife geschrieben, in dem X Sekunden schlafen.

Wenn ich das laufende Skript manuell stoppen muss, möchte ich es richtig machen - lasst die Anwendung funktionieren und lasst die Schleife nicht das nächste Mal eintreten.

Haben Sie eine Idee, wie dies erreicht werden kann? Ich habe über das Übergeben von Argumenten nachgedacht, aber ich konnte nicht herausfinden, wie man ein Argument zum Ausführen eines Skripts übergibt.

    
Samurai Girl 26.06.2012, 08:11
quelle

4 Antworten

22

Sie könnten ein Signal fangen, sagen SIGUSR1:

%Vor%

Wenn Sie die Schleife bei der nächsten Iteration beenden möchten:

%Vor%

Dabei ist pid die Prozess-ID des Skripts. Wenn das Signal während des Schlafs angehoben wird, wird es aufwachen (Schlaf schläft, bis ein Signal auftritt).

    
cdarke 26.06.2012, 08:32
quelle
2

Sie können einige Argumente an eine Datei übergeben. Bei jeder Iteration können Sie diese Datei lesen und sehen, ob sich Ihre Laufbedingungen geändert haben.

    
kokosing 26.06.2012 08:16
quelle
1

Die folgende Struktur ist möglicherweise angebracht, wenn Sie trotzdem eine Bereinigung vornehmen müssen. Verwenden Sie kill wie in cdarkes Antwort gezeigt.

%Vor%     
Fritz G. Mehner 26.06.2012 12:29
quelle
0

Die früher beschriebene Trap-Lösung eignet sich für große Schleifen, ist aber für den häufigen Fall, in dem Sie nur einen oder wenige Befehle durchlaufen, umständlich. In diesem Fall empfehle ich folgende Lösung:

%Vor%

Dies beendet die Schleife, wenn der Befehl einen Nicht-Null-Beendigungscode hat, was passieren kann, wenn er unterbrochen wird. Solange also command nicht SIGINT behandelt, wird durch Drücken von ctrl-C der aktuelle Befehl beendet und die Schleife beendet.

Bearbeiten: Nachdem ich Ihre Frage genauer gelesen habe, sehe ich, dass der aktuelle Befehl weiter ausgeführt werden soll. In diesem Fall gilt diese Lösung nicht.

    
amaurea 06.02.2013 10:45
quelle

Tags und Links