回答:
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 &
&
2回だけ使用することが可能ですか?
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
、1つの画面に収まる限り、常に最新のステータスを確認できます。
screen watch -n 3660 ./make-backup.sh