Когда я бегу:
watch 'cmd >> output.txt' &
работа приостанавливается системой:
3569 остановлен (вывод tty)
Есть ли обходной путь?
Когда я бегу:
watch 'cmd >> output.txt' &
работа приостанавливается системой:
3569 остановлен (вывод tty)
Есть ли обходной путь?
Цель watch
состоит в том, чтобы показать результаты команды в полноэкранном режиме и постоянно обновлять ее; если вы перенаправляете вывод в файл и создаете фоновый режим, то нет смысла использовать watch в первую очередь.
Если вы хотите просто запустить команду снова и снова с задержкой ( watch
по умолчанию ждет две секунды), вы можете использовать что-то вроде этого:
while true; do
cmd >> output.txt
sleep 2
done
Вот способ:
Поскольку вы управляете процессом, мы можем предположить, что вам не нужен дисплей терминала, и вы можете перенаправить файл. Если вы сделаете это, вы сможете справиться
watch
без проблем.sleep
, как полагает Михаил Мрозек, будет медленно отставать, что может быть нежелательно. Помимо сложного сценария оболочки, который отслеживает системное время и выполняет команду на основе истекшего времени,watch -p
может быть хорошим вариантом для точного времени.Для точного времени:
источник
&
два раза?man bash
чтобы увидеть, как&
работает первый . ;)Я не уверен в ваших мотивах, но, может быть, этого будет достаточно?
В противном случае, пожалуйста, объясните, почему вы действительно нуждаетесь
watch
.источник
tee
твой друг. Например, вот как вы можете показать количество файлов в текущем каталоге и добавлять его в count.txt каждые 2 секунды:источник
Зависит от вашей мотивации:
Вы хотите периодически что-то запускать. Тогда вы могли бы использовать непосредственно cron. (Если для ваших целей достаточно временной детализации 1 минута).
Вы хотите просто запустить что-то несколько раз:
(Вы можете запустить это, например, из crontab, хотя настоятельно рекомендуется использовать скрипт).
Вы хотите периодически запускать команду и иметь доступ к выводу ее последнего выполнения.
Вы можете записать вывод в ramfs (модифицируя скрипт раньше):
или даже лучше:
Вы можете комбинировать
screen
иwatch
, так что вы всегда можете проверить последний статус, если он умещается в одном экране:источник
Вы можете использовать экранную команду.
http://www.cyberciti.biz/tips/linux-screen-command-howto.html
источник
Если вы должны использовать
watch
- просто объедините ответы Майка Данжело и l0b0например
затем смотреть, как проходят секунды
источник
Часы предназначены для вывода на экран, но их вывод можно перенаправить (как stdout, так и stderr), тогда они будут работать в фоновом режиме.
источник