Відповіді:
Мета watch
- показ результатів команди на весь екран та постійне оновлення; якщо ви переспрямовуєте вихід у файл і перетворюєте його на фоновий малюнок, то насправді немає підстав для використання годинника в першу чергу.
Якщо ви хочете просто запускати команду знову і знову із затримкою ( watch
за замовчуванням чекає дві секунди), ви можете використовувати щось подібне:
while true; do
cmd >> output.txt
sleep 2
done
Ось такий спосіб:
watch -n 1 'date' &>/dev/null &
Оскільки ви фоновий процес, ми можемо вважати, що вам не потрібен дисплей терміналу, і ви добре переспрямовуєте файл. Якщо ви це зробите, ви зможете виправити фон watch
без проблем.
sleep
, як запропонував Майкл Мрозек, буде повільно відставати, що може бути небажаним. Окрім складеного сценарію оболонки, який відстежує системний час та виконує команду на основі минулого часу, watch -p
може бути хорошим варіантом для точних таймінгів.
Точні терміни:
watch -n 1 -p 'date' &>/dev/null &
&
два рази?
man bash
щоб побачити, як &
працює перший . ;)
Я не впевнений у ваших мотиваціях, але, можливо, цього було б достатньо?
while true; do sleep 2; cmd >>output.txt; done &
В іншому випадку, будь ласка, поясніть, навіщо вам це справді потрібно watch
.
Залежить від мотивації:
Ви хочете періодично щось запускати. Тоді ви могли використовувати безпосередньо cron. (Якщо детальності часу 1 хвилина достатньо для ваших цілей).
Ви хочете кілька разів запустити щось:
while sleep 2 ; do
cmd
done >& log.txt
(Ви можете запустити це, наприклад, із crontab, хоча використання сценарію настійно рекомендується).
Ви хочете періодично запускати команду і мати доступ до результатів останнього її виконання.
Ви можете написати вихід у рамку (змінивши сценарій раніше):
while sleep 2 ; do
cmd >& last_execution.log
done
а ще краще:
while sleep 2 ; do
cmd >& last_execution.log.tmp
mv last_execution.log.tmp last_execution.log ## atomically
done
Ви можете комбінувати screen
і watch
, щоб ви завжди могли перевірити останній стан, якщо він відповідає одному екрану:
screen watch -n 3660 ./make-backup.sh
Ви можете використовувати екранну команду.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html