Gnuwatch
ist ein sehr nützliches Tool zum Überprüfen einer Programmausgabe: Es führt das Programm aus und zeigt die Ausgabe alle 2 Sekunden im Vollbildmodus an.
Manchmal möchte ich die vorherige Ausgabe nicht löschen, sondern zeilenweise mit Zeitstempel drucken. Dafür verwende ich Bash-Skripte wie:
while true;
do echo -n "`date` ";
ssh ubuntu@server -o ConnectTimeout=1 "uptime" ;
sleep 1;
done
Gibt es einwatch
-ähnliches Tool, das einen Befehl ausführen und seine Ausgabe mit einem Zeitstempel in einer Zeile anzeigen kann, ohne die vorherige Ausgabe zu löschen?
Antwort1
Ich würde sagen, Sie haben es in einfachen Schleifen gefunden, aber Sie könnten von hier aus eine Reihe von Dingen tun:
Schreiben Sie eine Funktion, die das für Sie erledigt
function uberwatch {
# call: uberwatch <interval> <command>
while true; do
"${@:2}";
sleep $1;
done
}
Sie könnten das irgendwo in Ihrer Nähe unterbringen ~/.bashrc
.
Protokollieren Sie die Ausgabe in einer Datei, aber sehen Sie sie weiterhin mitwatch
watch "command | tee -a watchlog.log"
Sie sehen zwar immer noch nur den letzten Durchlauf, können aber bei Bedarf in einem historischen Protokoll stöbern.
Antwort2
while true; mache Datum >> /vat/tmp/watch.log; sleep 600; ls -l Dateiname >> /var/tmp/watch.log; fertig
Mir gefällt die von Artem oben erwähnte while-Schleife, aber ich wollte die Daten in einer Datei speichern, damit ich sie analysieren kann, wenn ich zurückkomme, und habe daher Weiterleitungen zu einer Datei hinzugefügt. In meinem Fall beobachte ich die Datei alle 10 Minuten und prüfe die Dateigröße mit ls -l
-Jay
Antwort3
Ich mag Oli'smodifizierte watch
Lösung, aber mir gefällt die Idee, das Protokoll in Echtzeit anzuzeigen, anstatt später darin herumzuwühlen.
Hier ist eine Idee:
watch 'echo $(date && command 2>&1 | tail -n 1) >> watchlog.log && cat watchlog.log | tail'
Erläuterung:
echo
vermeidet einen Zeilenumbruch zwischendate
undcommand
.>>
hängt es an die Datei an, dasselbe wie,| tee -a
jedoch ohne zusätzliche Duplizierung inwatch
der Ausgabe.2>&1
kombiniert stderr mit stdout, um sicherzustellen, dass Sie alles sehen, einschließlich Fehler.| tail -n 1
beschränkt die Ausgabe auf die letzte Zeile (die diedate
Ausgabe enthält), um eine sauberere Echtzeitanzeige zu ermöglichen. Dies kann Ihr Wunsch für den Inhalt der Protokolldatei sein, muss es aber nicht.