私が走ると:
watch 'cmd >> output.txt' &
ジョブはシステムによって一時停止されます。
3569停止(tty出力)
回避策はありますか?
watch
の目的は、コマンドの結果をフルスクリーンで表示し、継続的に更新することです。出力をファイルにリダイレクトしてバックグラウンド化する場合、そもそもwatchを使用する理由はまったくありません。
コマンドを遅延して何度も繰り返し実行したい場合(watch
はデフォルトで2秒待機します)、次のようなものを使用できます。
while true; do
cmd >> output.txt
sleep 2
done
ここに方法があります:
watch -n 1 'date' &>/dev/null &
プロセスをバックグラウンドで使用しているので、ターミナルディスプレイは必要なく、ファイルに正しくリダイレクトしていると想定できます。そうすることで、バックグラウンドでwatch
を問題なく行うことができます。
sleep
は、Michael Mrozekによって示唆されているように、ゆっくり遅れて望ましくありません。システム時間を監視し、経過時間に基づいてコマンドを実行する複雑なシェルスクリプトwatch -p
は、正確なタイミングの良いオプションです。
正確なタイミング:
watch -n 1 -p 'date' &>/dev/null &
あなたの動機はわかりませんが、これで十分でしょうか?
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
を組み合わせて、1画面に収まる限り、常に最新のステータスを確認できます。
screen watch -n 3660 ./make-backup.sh
tee
はあなたの友達です。たとえば、現在のディレクトリ内のファイル数を表示し、それをcount.txtに2秒ごとに追加する方法は次のとおりです。
watch 'find . -maxdepth 1 -printf " " | wc -c | tee --append count.txt'
Screenコマンドを使用できます。
http://www.cyberciti.biz/tips/linux-screen-command-howto.html
watch
を使用する必要がある場合-mike dangeloとl0bからの回答を組み合わせるだけです
watch -n 1 'cmd | tee -a output.txt' &>/dev/null &
例えば.
watch -n 1 'date | tee -a output.txt' &>/dev/null &
次に秒が経過するのを見る
tail -f output.txt
ウォッチは画面に出力するように設計されていますが、出力をリダイレクトして(stdoutとstderrの両方)、バックグラウンドで実行できます。
watch 'date >>fa' >/dev/null 2>/dev/null &