Ответы:
Цель 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