Linux / Befehl watch: Einen Befehl wiederholt ausführen
watch ist ein Befehl, der wiederholt einen angegebenen Befehl in regelmäßigen Abständen ausführt und den gesamten Terminalbildschirm mit den Ergebnissen aktualisiert. Das Standardausführungsintervall beträgt 2 Sekunden, und Sie können das Intervall mit -n ändern und die Teile, die sich im Vergleich zu den vorherigen Ergebnissen geändert haben, mit -d hervorheben.
Es ist nützlich, wenn man kontinuierlich sich ändernde Werte beobachtet, wie Speicher-, Festplatten-, Prozess- oder Netzwerkstatus, über einen kurzen Zeitraum. Zum Beenden verwendet man normalerweise q oder Ctrl+c.
Was ist der watch-Befehl?
watch gehört zum procps-ng-Werkzeugsatz. Es führt den angegebenen Befehl wiederholt aus und zeigt dessen Standardausgabe und Standardfehlerausgabe im Terminal an. Die Anzeige ist auf den verfügbaren Bildschirmbereich beschränkt.
Oben auf dem Standardbildschirm werden Informationen wie das Ausführungsintervall, der ausgeführte Befehl, der Host, die Zeit und der Beendigungsstatus angezeigt. Wenn die Ausführungsergebnisse länger als der Bildschirm sind, können Teile ausgeblendet werden, sodass andere Tools möglicherweise besser geeignet sind, um lange Logs oder große Mengen an Ausgabe zu verfolgen.
Sie können das Standardverhalten und die aktuellen Optionen im watch(1) Handbuch und im procps-ng watch Handbuchquelle nachprüfen.
Grundlegende Syntax und Verwendung
watch [option] command [command arguments...]
Wenn Sie free -h wiederholt ohne Optionen ausführen, wird die Speichernutzung standardmäßig alle 2 Sekunden aktualisiert.
watch free -h
Um in 1-Sekunden-Intervallen auszuführen, fügen Sie die -n-Option hinzu.
watch -n 1 free -h
Die watch-Option sollte vor dem Befehl stehen, der wiederholt werden soll. Nach dem Befehl geschriebene Optionen werden normalerweise an den wiederholten Befehl übergeben, nicht an watch.
Häufig verwendete Optionen
| Option | Funktion | Verwendung |
|---|---|---|
-n seconds |
Geben Sie das Ausführungsintervall an | Geben Sie einen Zeitwert in Sekunden wie watch -n 1 command an. |
-d |
Heben Sie die geänderten Teile hervor | Hebt die Zeichen hervor, die sich im Vergleich zum vorherigen Bildschirm geändert haben. |
-d=permanent |
Kumulative Änderungsmarkierung | Hervor heben wird für alle Teile fortgesetzt, die seit der ersten Ausführung mindestens einmal geändert wurden. |
-g |
Beenden, wenn sich die Ausgabe ändert | Kann verwendet werden, um zu warten, bis sich eine Datei oder ein Status ändert. |
-e |
Aktualisierung bei Befehlsfehler stoppen | Wenn der wiederholte Befehl mit einem Nicht-Null-Status endet, wird der Bildschirm angehalten und nach einem Tastendruck beendet. |
-b |
Bei Befehlsfehler piepen | Wenn der wiederholte Befehl einen Nicht-Null-Status zurückgibt, ertönt das Terminalglockenzeichen. |
-p |
Gleichmäßige Startintervalle anstreben | Ausführen gemäß dem angegebenen Intervall basierend auf der Startzeit des vorherigen Laufs. |
-t |
Oberen Titel ausblenden | Etwas mehr Platz sichern, um die Befehlsergebnisse anzuzeigen. |
-c |
Interpretieren Sie ANSI-Farben | Zeigen Sie die von dem wiederholten Befehl unterstützten Farben und Stile an. |
-w |
Verhindern Sie den Zeilenumbruch langer Zeilen | Zeigt Zeilen, die die Bildschirmbreite überschreiten, indem sie abgeschnitten werden, anstatt in die nächste Zeile umzubrechen. |
-x |
Ohne Durchlaufen der Shell ausführen | Führen Sie Programme direkt aus, ohne Shell-Erweiterung und Pipes zu verwenden, anstelle von sh -c. |
Die unterstützten Optionen können je nach Version von procps-ng, die in der Distribution enthalten ist, variieren. Sie können die auf Ihrem aktuellen System verfügbaren Optionen mit folgendem Befehl überprüfen.
watch --help watch --version
Steuerung des Intervalls und der Ausgabeänderungen
Geben Sie das Ausführungsintervall mit -n an
Geben Sie einen Wert in Sekunden nach -n oder --interval an. Sie können auch Dezimalzahlen verwenden, aber ein zu kurzes Intervall kann unnötige Belastung für CPU, Festplatte, Netzwerk und Zielservices verursachen.
watch -n 0.5 date watch -n 5 df -h
Wenn das Intervall weggelassen wird, beträgt der Standardwert 2 Sekunden. Im aktuellen Handbuch von procps-ng wird eine Begrenzung für zu kleine oder zu große Werte angewendet, und es wird empfohlen, den spezifischen Bereich in der installierten Version zu überprüfen.
Markieren Sie Änderungen mit -d
-d hebt Teile hervor, die sich geändert haben, indem der aktuelle Bildschirm mit dem vorherigen verglichen wird. Dies ist praktisch beim Anzeigen von Speicher-, Prozess- und Netzwerkstatistiken, die sich schnell ändern.
watch -n 1 -d free -h
Um alle geänderten Stellen kontinuierlich nach dem ersten Bildschirm anzuzeigen, verwenden Sie -d=permanent, wenn die installierte Version dies unterstützt.
watch -n 1 -d=permanent free -h
Beenden Sie, wenn Änderungen auftreten, mit -g
-g oder --chgexit beendet watch, wenn sich die sichtbare Ausgabe auf dem Bildschirm ändert. Es kann verwendet werden, wenn auf Änderungen von Dateiänderungszeiten oder Status von Bereitstellungsaufgaben gewartet wird.
watch -g -n 1 'stat -c %Y /tmp/result.txt'
Wenn sich die Ausgabe nur in Bereichen ändert, die außerhalb des Bildschirmausschnitts liegen, werden Änderungen möglicherweise nicht erkannt. Für die Automatisierung, bei der die Änderungserkennung entscheidend ist, ist es sicherer, den Exit-Status des Zielbefehls oder spezielle Überwachungstools zu verwenden, anstatt die Bildschirmausgabe zu vergleichen.
Warum Anführungszeichen bei der Verwendung von Pipes und Shell-Syntax notwendig sind
Standardmäßig führt watch den übergebenen Befehl über sh -c aus. Wenn Sie Pipes, Umleitungen, Semikolons, Variablen und Platzhalter als Teil des wiederholten Befehls verwenden möchten, ist es klarer, den gesamten Befehl in einfache Anführungszeichen zu setzen.
Einfache Befehle werden so, wie sie sind, übergeben
Befehle ohne Pipes oder Umleitungen können direkt so geschrieben werden.
watch -n 2 ls -lh /var/log
Pipes und Variablen den gesamten Befehl einschließen
Im folgenden Beispiel verhindern einfache Anführungszeichen, dass die aktuelle Shell die Pipe zuerst verarbeitet, und übergeben den gesamten Befehl an die Shell, die ihn wiederholt ausführen wird.
watch -n 1 'ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 15'
Umleitungen oder mehrere Befehle werden auf die gleiche Weise eingeschlossen.
watch -n 5 'date; df -h / /var'
Die Option -x führt das Programm direkt aus, ohne die Shell zu verwenden. Dies kann die Ausführungskosten leicht senken und die Übergabe von Argumenten vereinfachen, aber Shell-Funktionen wie Pipes, Umleitung, Variablenexpansion und Platzhalter können nicht verwendet werden.
watch -x -n 2 ls -lh /var/log
Das allgemeine Verhalten von Anführungszeichen ist in der GNU Bash Quoting Dokumentation zu finden.
Häufig in der Praxis verwendete Beispiele
| Zu überprüfende Punkte | Beschreibung |
|---|---|
| Speicher | Aktualisiert das free -h-Ergebnis jede Sekunde und hebt die geänderten Teile hervor. |
| Speicherplatz | Überprüft alle 5 Sekunden die Nutzung des Root- und des /var-Dateisystems. |
| CPU-Intensive Prozesse | Sortiert die ps-Ergebnisse nach CPU-Auslastung und zeigt die Top-Einträge an. |
| Socket-Zusammenfassung | Überprüfen Sie den allgemeinen Status der Netzwerksockets wiederholt mit ss -s. |
| Dateigröße | Beobachten Sie Änderungen der Größe heruntergeladener oder komprimierter Dateien mit stat. |
| Service-Status | Führen Sie systemctl status wiederholt mit --no-pager aus. |
Speichernutzung
watch -n 1 -d free -h
Speicherauslastung
watch -n 5 'df -h / /var'
Prozesse mit hoher CPU-Auslastung
watch -n 1 'ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 15'
Netzwerk-Socket-Zusammenfassung
watch -n 1 ss -s
Dateigröße und Änderungszeit
watch -n 1 'stat -c "%s bytes %y" archive.tar'
Service-Status
watch -n 2 'systemctl --no-pager --full status nginx'
Befehle, die lange Ausgaben erzeugen können, wie z. B. der Status von Diensten, werden je nach Terminalgröße möglicherweise nur teilweise angezeigt. Wenn der Zweck die kontinuierliche Protokollverfolgung ist, ist ein entsprechend dafür geeigneter Befehl, wie journalctl -f -u nginx, geeigneter.
Exakte Ausführungsintervalle und lang laufende Befehle
Im Standardverhalten wartet das System nach der Ausführung eines einzelnen Befehls für das angegebene Intervall, bevor es die nächste Ausführung startet. Die Verwendung von -p oder --precise versucht, die nächste Startzeit basierend darauf auszurichten, wann der vorherige Befehl gestartet wurde.
watch -p -n 10 'date; curl -fsS https://example.com/health'
Wenn die Ausführungszeit eines wiederholten Befehls länger als das angegebene Intervall ist, wird watch nicht mehrere Instanzen gleichzeitig ausführen, sondern auf das Ende des aktuellen Befehls warten. Für Stapelaufgaben, die genaue Zyklen und garantierte Ausführung erfordern, ist die Verwendung eines systemd-Timers oder eines Aufgabenplaners geeigneter als watch.
Steuerung mit der Tastatur
| Taste | Aktion |
|---|---|
q |
Beendet watch. Der laufende untergeordnete Befehl wird möglicherweise nicht sofort gestoppt. |
Ctrl+c |
Sendet ein Interrupt-Signal, um sowohl watch als auch die laufende Aufgabe zu beenden. |
Space |
Fordert die Ausführung eines Befehls an, ohne auf die nächste geplante Zeit zu warten. Wenn bereits ausgeführt, startet es die nächste Ausführung sofort nach Abschluss ohne Verzögerung. |
Die Tastenkombinationen können je nach Version von procps-ng variieren, daher sollte zunächst die aktuelle man watch des Systems überprüft werden.
Vorsichtsmaßnahmen bei der Verwendung von watch
- Bevorzugt für Befehle zur Nur-Lese-Prüfung verwenden: Wiederholende Befehle, die den Zustand ändern, wie löschen, Zahlung, Benutzererstellung oder Neustart eines Dienstes, können zu unerwünschten Ergebnissen führen.
- Vermeiden Sie sehr kurze Intervalle: Das Ausführen von Datenbankabfragen, Remote-API-Anfragen oder großen Verzeichnissuchen in sehr kurzen Abständen kann das System oder externe Dienste belasten.
- Überprüfen Sie den sichtbaren Bereich auf dem Bildschirm:
-gund-dwerden durch die im Terminal angezeigte Ausgabe beeinflusst, sodass Änderungen im abgeschnittenen Bereich möglicherweise nicht erkannt werden. - Vermeiden Sie interaktive Befehle: Programme, die auf Benutzereingaben warten, wie Passwortabfragen, Editoren oder Pager, eignen sich nicht für die wiederholte Ausführung.
- Exit-Status unterscheiden: Der Erfolgsstatus des grundlegenden
watchbedeutet nicht immer, dass der wiederholte Befehl erfolgreich war. Wenn Sie auf Befehlsfehler reagieren müssen, prüfen Sie Optionen wie-ein der aktuellen Version.
Wenn andere Werkzeuge geeigneter sind als watch
| Zweck | Geeignete Werkzeuge |
|---|---|
| Verfolgung von in eine Datei angehängten Protokollen | tail -f oder tail -F |
| Verfolgung von systemd-Dienstprotokollen | journalctl -f -u service_name |
| Überprüfung der Ressourcennutzung von Prozessen | top oder htop |
| Geplante wiederkehrende Aufgaben | systemd-Timer oder cron |
| Langfristige Metrik-Sammlung und Warnmeldungen | Dediziertes Überwachungssystem |
watch ist geeignet für eine Person, um kurzfristige Änderungen auf dem Terminal zu beobachten. Wenn Sie Aufzeichnungen, Benachrichtigungen und Langzeitanalysen benötigen, sollten Sie ein für diesen Zweck geeignetes Werkzeug wählen.
Häufig gestellte Fragen
Es wird angezeigt, dass der Befehl watch nicht existiert
watch ist normalerweise im Paket procps oder procps-ng enthalten. Es kann in minimalen Installationsumgebungen nicht vorhanden sein, daher müssen Sie das Paket mit dem Paketmanager Ihrer aktuellen Distribution installieren. Prüfen Sie die Dokumentation der Distribution nach dem Paketnamen und dem Installationsbefehl.
Aliase oder Shell-Funktionen werden innerhalb von watch nicht ausgeführt
Aliase und Funktionen sind möglicherweise nur in der aktuellen interaktiven Shell definiert und stehen der von watch gestarteten sh -c-Umgebung nicht zur Verfügung. Verwenden Sie für wiederholte Aufgaben ein bekanntes ausführbares Programm oder ein separates Skript mit einem ausdrücklich gewählten Interpreter.
Befehlsfarben werden nicht angezeigt
Aktivieren Sie die ANSI-Farbinterpretation mit watch -c und stellen Sie den wiederholten Befehl so ein, dass er Farb-Codes auch in nicht-interaktiven Umgebungen ausgibt. Je nach Programm kann eine separate Option wie --color=always erforderlich sein.
Warum sollten Befehle, die Pipes enthalten, in Anführungszeichen gesetzt werden?
Ohne Anführungszeichen kann die aktuelle Shell die Pipe zuerst verarbeiten, wodurch die gesamte Ausgabe von watch an einen anderen Befehl weitergegeben wird. Wenn die gesamte Pipeline in einfache Anführungszeichen gesetzt wird, kann watch sie als eine einzige Befehlszeichenfolge an die Shell übergeben, die sie wiederholt ausführt.
Zusammenfassung
watch ist ein einfaches Beobachtungswerkzeug, das die Ergebnisse eines Befehls in einem Standardintervall von 2 Sekunden wiederholt anzeigt. Sie können das Intervall mit -n ändern, Änderungen mit -d hervorheben und beenden, wenn sich die Ausgabe mit -g ändert.
Befehle, die Pipes und Umleitungen enthalten, sollten vollständig in einfache Anführungszeichen gesetzt werden, und die Last sowie die Nebenwirkungen wiederholter Ausführung auf dem System sollten überprüft werden. Die Zwecke anderer Befehle nach Aufgabe finden Sie in der Linux-Befehlsliste.




