Ответы:
Цель watch
состоит в том, чтобы показать результаты команды в полноэкранном режиме и постоянно обновлять ее; если вы перенаправляете вывод в файл и создаете фоновый режим, то нет смысла использовать 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, хотя настоятельно рекомендуется использовать скрипт).
Вы хотите периодически запускать команду и иметь доступ к выводу ее последнего выполнения.
Вы можете записать вывод в ramfs (модифицируя скрипт раньше):
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