Відповіді:
Мета 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