web-dev-qa-db-de.com

Befehl unter Linux automatisch wiederholen

Ist es in der Linux-Befehlszeile möglich, einen Befehl alle n Sekunden wiederholen zu lassen?.

Nehmen wir zum Beispiel an, ich habe einen laufenden Import und das mache ich

ls -l

um zu überprüfen, ob die Dateigröße zunimmt. Ich hätte gerne einen Befehl, diesen automatisch wiederholen zu lassen.

291
Marty Wallace

Beobachten Sie alle 5 Sekunden ...

watch -n 5 ls -l

Wenn Sie eine visuelle Bestätigung der Änderungen wünschen, hängen Sie --differences vor dem Befehl ls an.

Laut der OSX-Manpage gibt es auch

Die Option --cumulative macht die Hervorhebung "sticky" und zeigt eine laufende Anzeige aller Positionen an, die sich jemals geändert haben. Mit der Option -t oder --no-title wird die Kopfzeile deaktiviert, die das Intervall, den Befehl und die aktuelle Uhrzeit am oberen Rand der Anzeige sowie die folgende leere Zeile anzeigt.

Die Linux/Unix-Manpage finden Sie hier

524
Rawkode
while true; do
    sleep 5
    ls -l
done
111

"watch" erlaubt keine Sekundenbruchteile in Busybox, während "sleep" dies erlaubt. Wenn Ihnen das wichtig ist, versuchen Sie Folgendes:

while true; do ls -l; sleep .5; done
90
mikhail

sleep gibt bereits 0 zurück. Als solches benutze ich:

while sleep 3 ; do ls -l ; done

Dies ist ein kleines bisschen kürzer als die Lösung von mikhail. Ein kleiner Nachteil ist, dass es vor dem ersten Ausführen des Zielbefehls in den Ruhezustand wechselt.

31

Wenn der Befehl einige Sonderzeichen wie Pipes und Anführungszeichen enthält, muss der Befehl mit Anführungszeichen aufgefüllt werden. Um beispielsweise ls -l | grep "txt" zu wiederholen, sollte der Befehl watch wie folgt lauten:

watch -n 5 'ls -l | grep "txt"'

18
jonathanzh

Das periodische Ausführen von Befehlen ohne cron ist möglich, wenn wir mit while fortfahren.

Als Befehl:

while true ; do command ; sleep 100 ; done &
[ ex: # while true;  do echo `date` ; sleep 2 ; done & ]

Beispiel:

while true
do echo "Hello World"
sleep 100
done &

Vergessen Sie nicht den letzten &, da er Ihre Schleife in den Hintergrund rücken wird. 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.

# ./while_check.sh &

Hier ist die gleiche Schleife wie bei einem Skript. Erstellen Sie die Datei "while_check.sh" und fügen Sie diese ein:

#!/bin/bash
while true; do 
    echo "Hello World" # Substitute this line for whatever command you want.
    sleep 100
done

Führen Sie es dann aus, indem Sie bash ./while_check.sh & eingeben.

13
Ranjithkumar T

uhr ist gut, wird aber den Bildschirm reinigen.

watch -n 1 'ps aux | grep php'
7
Eduardo

Wenn Sie "Driften" vermeiden möchten, das heißt, Sie möchten, dass der Befehl alle N Sekunden ausgeführt wird, unabhängig davon, wie lange der Befehl dauert (vorausgesetzt, er dauert weniger als N Sekunden). zweite Genauigkeit (und gibt eine Warnung aus, wenn sie nicht mithalten kann):

PERIOD=5

while [ 1 ]
do
    let lastup=`date +%s`
    # do command
    let diff=`date +%s`-$lastup
    if [ "$diff" -lt "$PERIOD" ]
    then
        sleep $(($PERIOD-$diff))
    Elif [ "$diff" -gt "$PERIOD" ]
    then
        echo "Command took longer than iteration period of $PERIOD seconds!"
    fi
done

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.

6
mcote

Sie können Folgendes ausführen und nur die Größe filtern. Wenn Ihre Datei somefilename heißt, können Sie Folgendes tun

while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done

Eine der vielen Ideen.

4

Wenn Sie eine bestimmte Anzahl von Aktionen ausführen möchten, können Sie dies immer tun:

repeat 300 do my first command here && sleep 1.5
4
brightball
watch -n 5 'ls -l 

Führt den Befehl ls -l alle 5 Sekunden aus

Ausgabe :-

Every 5.0s: ls -l                                                                                                      Fri Nov 17 16:28:25 2017

total 169548
-rw-rw-r--  1 sachin sachin     4292 Oct 18 12:16 About_us_Admission.doc
-rw-rw-r--  1 sachin sachin      865 Oct 13 15:26 About_us_At_glance.doc
-rw-rw-r--  1 sachin sachin     1816 Oct 13 16:11 About_us_Principle.doc
-rw-rw-r--  1 sachin sachin     1775 Oct 13 15:59 About_us_Vission_mission.doc
-rw-rw-r--  1 sachin sachin     1970 Oct 13 16:41 Academic_Middle_school.doc
-rw-rw-r--  1 sachin sachin      772 Oct 16 16:07 academics_High_School.doc
-rw-rw-r--  1 sachin sachin      648 Oct 16 13:34 academics_pre_primary.doc
-rw-rw-r--  1 sachin sachin      708 Oct 16 13:39 academics_primary.doc
-rwxrwxr-x  1 sachin sachin     8816 Nov  1 12:10 a.out
-rw-rw-r--  1 sachin sachin    23956 Oct 23 18:14 Ass1.c++
-rw-rw-r--  1 sachin sachin      342 Oct 23 22:13 Ass2.doc
drwxrwxr-x  2 sachin sachin     4096 Oct 19 10:45 Backtracking
drwxrwxr-x  3 sachin sachin     4096 Sep 23 20:09 BeautifulSoup
drwxrwxr-x  2 sachin sachin     4096 Nov  2 00:18 CL_1
drwxrwxr-x  2 sachin sachin     4096 Oct 23 20:16 Code
drwxr-xr-x  2 sachin sachin     4096 Nov 15 12:05 Desktop
-rw-rw-r--  1 sachin sachin        0 Oct 13 23:12 doc
drwxr-xr-x  4 sachin sachin     4096 Nov  6 21:18 Documents
drwxr-xr-x 27 sachin sachin    12288 Nov 17 13:23 Downloads
-rw-r--r--  1 sachin sachin     8980 Sep 19 23:58 examples.desktop
1
HeadAndTail

Um die Drift leichter zu minimieren, verwenden Sie:

while :; do sleep 1m & some-command; wait; done

aufgrund der Bash-Zeit für die Ausführung der Schleifenstruktur und des tatsächlich auszuführenden Sleep-Befehls tritt immer noch eine geringfügige Abweichung auf.

hinweis: ':' ergibt 0, dh wahr.

1
math

Eine übersichtliche Lösung, die besonders nützlich ist, wenn Sie den Befehl wiederholt ausführen möchten, bis er fehlschlägt, und alle Ausgaben anzeigt.

while ls -l; do
    sleep 5
done
0
arsdragonfly