Antworten:
Der Zweck von watch
ist, die Ergebnisse eines Befehls im Vollbildmodus anzuzeigen und fortlaufend zu aktualisieren. Wenn Sie die Ausgabe in eine Datei umleiten und im Hintergrund anzeigen, gibt es eigentlich keinen Grund, watch überhaupt zu verwenden.
Wenn Sie einen Befehl nur immer wieder mit einer Verzögerung ausführen möchten ( watch
standardmäßig zwei Sekunden), können Sie Folgendes verwenden:
while true; do
cmd >> output.txt
sleep 2
done
Hier ist ein Weg:
watch -n 1 'date' &>/dev/null &
Da Sie den Vorgang im Hintergrund ausführen, können wir davon ausgehen, dass Sie die Terminalanzeige nicht benötigen und problemlos in eine Datei umleiten können. Wenn Sie dies tun, können Sie problemlos Hintergrundinformationen erstellen watch
.
sleep
Wie von Michael Mrozek vorgeschlagen, wird es langsam nacheilen, was unerwünscht sein kann. Abgesehen von einem verschachtelten Shell-Skript, das die Systemzeit überwacht und einen Befehl basierend auf der verstrichenen Zeit ausführt, watch -p
kann dies eine gute Option für genaue Zeitabläufe sein.
Für genaue Zeiten:
watch -n 1 -p 'date' &>/dev/null &
&
zwei mal zu verwenden?
man bash
zu sehen, wie das erste &
funktioniert. ;)
Ich bin mir nicht sicher, was deine Motivation angeht, aber vielleicht würde das ausreichen?
while true; do sleep 2; cmd >>output.txt; done &
Ansonsten erklären Sie bitte, warum Sie wirklich brauchen watch
.
Kommt auf deine Motivation an:
Sie möchten regelmäßig etwas ausführen. Dann könntest du direkt cron benutzen. (Wenn eine Zeitgranularität von 1 Minute für Ihre Zwecke ausreicht).
Sie möchten einfach etwas wiederholt ausführen:
while sleep 2 ; do
cmd
done >& log.txt
(Sie können dies zum Beispiel von der crontab ausführen, obwohl die Verwendung eines Skripts dringend empfohlen wird).
Sie möchten einen Befehl regelmäßig ausführen und Zugriff auf die Ausgabe seiner letzten Ausführung haben.
Sie können die Ausgabe in ein RAMFS schreiben (vorher das Skript ändern):
while sleep 2 ; do
cmd >& last_execution.log
done
oder noch besser:
while sleep 2 ; do
cmd >& last_execution.log.tmp
mv last_execution.log.tmp last_execution.log ## atomically
done
Sie können screen
und kombinieren watch
, so dass Sie immer den neuesten Status abrufen können, solange er in einen Bildschirm passt:
screen watch -n 3660 ./make-backup.sh
Sie können den Bildschirmbefehl verwenden.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html