Ist es in der Linux-Befehlszeile möglich, einen Befehl alle n Sekunden wiederholen zu lassen ?
Angenommen, ich habe einen Import ausgeführt, und das tue ich
ls -l
um zu überprüfen, ob die Dateigröße zunimmt. Ich hätte gerne einen Befehl, um diese automatisch wiederholen zu lassen.
watch mysql dbname -e \"show processlist\;\"
brew install watch
quelle
watch
hat auch den unglücklichen Nebeneffekt, den Bildschirm zu löschen, so dass manchmal die Schleife nützlich ist. Welche zu verwenden ist, hängt vom gewünschten Format der Ausgabe ab.--differences
sie hervorheben können (wenn Sie über die Neulackierung des Terminals besorgt sind)watch
. Watch funktioniert beispielsweise nicht, wenn Sie in jedem Aufruf eine Zufallszahl generieren möchten, zwatch -n 1 echo ${RANDOM}
. Der Zufall wird nur einmal aufgerufen."watch" erlaubt keine Sekundenbruchteile in Busybox, während "sleep" dies tut. Wenn Ihnen das wichtig ist, versuchen Sie Folgendes:
quelle
sleep
kehrt bereits zurück0
. Als solches benutze ich:Dies ist ein kleines bisschen kürzer als die Lösung von mikhail. Ein kleiner Nachteil ist, dass es schlafen geht, bevor der Zielbefehl zum ersten Mal ausgeführt wird.
quelle
Wenn der Befehl Sonderzeichen wie Pipes und Anführungszeichen enthält, muss der Befehl mit Anführungszeichen aufgefüllt werden. Um dies zu wiederholen
ls -l | grep "txt"
, sollte der Befehl watch beispielsweise wie folgt lauten:watch -n 5 'ls -l | grep "txt"'
quelle
Das regelmäßige Ausführen von Befehlen ohne Cron ist möglich, wenn wir mit gehen
while
.Als Befehl:
Beispiel:
Vergessen Sie nicht das letzte,
&
da es Ihre Schleife in den Hintergrund stellt. Aber Sie müssen die Prozess-ID mit dem Befehl "ps -ef | grep your_script" finden, dann müssen Sie sie beenden. Fügen Sie daher bitte das '&' hinzu, wenn Sie das Skript ausführen.Hier ist die gleiche Schleife wie bei einem Skript. Erstellen Sie die Datei "while_check.sh" und fügen Sie diese ein:
Führen Sie es dann durch Eingabe aus
bash ./while_check.sh &
quelle
echo $!
nach jedem Start des Hintergrundprozesses ändern. Dies ist die PID des letzten im Hintergrund gestarteten untergeordneten Prozesses.echo `date`
ist nur eine schlechte und leicht fehlerhafte Art, einfach zu schreibendate
. (Der Fehler hat mit dem fehlenden Zitieren des Arguments zu tunecho
.) Siehe auch nutzlose Verwendung vonecho
.Uhr ist gut, aber wird den Bildschirm reinigen.
quelle
Wenn Sie ein "Driften" vermeiden möchten, dh den Befehl alle N Sekunden ausführen möchten, unabhängig davon, wie lange der Befehl dauert (vorausgesetzt, er dauert weniger als N Sekunden), finden Sie hier eine Bash, die einen Befehl alle 5 Sekunden mit eins wiederholt. zweite Genauigkeit (und druckt eine Warnung aus, wenn sie nicht mithalten kann):
Es kann immer noch ein wenig driften, da der Schlaf nur auf eine Sekunde genau ist. Sie können diese Genauigkeit verbessern, indem Sie den Befehl date kreativ verwenden.
quelle
Wenn Sie eine bestimmte Anzahl von Malen ausführen möchten, können Sie dies immer tun:
quelle
for x in {1..300} ; do
Befehle||break;sleep 1.5; done
Sie können Folgendes ausführen und nur die Größe filtern. Wenn Ihre Datei aufgerufen wurde
somefilename
, können Sie Folgendes tunwhile :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done
Eine der vielen Ideen.
quelle
Verwenden Sie:
Aufgrund der Zeit, die bash benötigt, um die Schleifenstruktur auszuführen, und des Schlafbefehls, der tatsächlich ausgeführt werden soll, wird es immer noch eine geringfügige Abweichung geben.
Hinweis: ':' wertet auf 0, dh wahr.
quelle
Führt den
ls -l
Befehl alle 5 Sekunden ausAusgabe :-
quelle
Eine übersichtliche Lösung, die besonders nützlich ist, wenn Sie den Befehl wiederholt ausführen möchten, bis er fehlschlägt, und mit der Sie alle Ausgaben anzeigen können.
quelle