Odpowiedzi:
Celem watch
jest pokazanie wyników polecenia na pełnym ekranie i ciągła aktualizacja; jeśli przekierowujesz dane wyjściowe do pliku i tworzysz tło, naprawdę nie ma powodu, aby używać zegarka w pierwszej kolejności.
Jeśli chcesz po prostu uruchamiać polecenie w kółko z opóźnieniem ( watch
domyślnie czeka dwie sekundy), możesz użyć czegoś takiego:
while true; do
cmd >> output.txt
sleep 2
done
Oto sposób:
watch -n 1 'date' &>/dev/null &
Ponieważ proces jest tworzony w tle, możemy założyć, że nie potrzebujesz wyświetlacza terminala i możesz przekierowywać do pliku. Jeśli to zrobisz, będziesz mógł w tle watch
bez problemu.
sleep
, jak sugeruje Michał Mrożek, będzie powoli opóźniał się, co może być niepożądane. Oprócz zawiłego skryptu powłoki, który monitoruje czas systemowy i wykonuje polecenie na podstawie upływu czasu, watch -p
może być dobrą opcją dla precyzyjnych czasów.
Aby uzyskać dokładne czasy:
watch -n 1 -p 'date' &>/dev/null &
&
dwa razy?
man bash
aby zobaczyć, jak &
działa pierwsza . ;)
Nie jestem pewien twoich motywacji, ale może to wystarczy?
while true; do sleep 2; cmd >>output.txt; done &
W przeciwnym razie wyjaśnij, dlaczego tak naprawdę potrzebujesz watch
.
Zależy od twoich motywacji:
Chcesz coś uruchomić okresowo. Wtedy możesz użyć bezpośrednio crona. (Jeśli dokładność czasu 1 minuta jest wystarczająca dla twoich celów).
Chcesz po prostu uruchomić coś wielokrotnie:
while sleep 2 ; do
cmd
done >& log.txt
(Możesz uruchomić to na przykład z crontab, chociaż wysoce zalecane jest użycie skryptu).
Chcesz okresowo uruchamiać polecenie i mieć dostęp do danych wyjściowych jego ostatniego wykonania.
Możesz zapisać dane wyjściowe w ramfs (wcześniej modyfikując skrypt):
while sleep 2 ; do
cmd >& last_execution.log
done
lub nawet lepiej:
while sleep 2 ; do
cmd >& last_execution.log.tmp
mv last_execution.log.tmp last_execution.log ## atomically
done
Możesz łączyć screen
i watch
, dzięki czemu zawsze możesz sprawdzić najnowszy status, o ile mieści się w jednym ekranie:
screen watch -n 3660 ./make-backup.sh
Możesz użyć polecenia ekranowego.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html