watchコマンド入門|繰り返し実行で変化を見張る

watchコマンド入門|繰り返し実行で変化を見張る

デプロイ直後や重い処理の待ち時間に、同じコマンドを何度も打ち直して画面を確かめる——そんな時間が、私にはよくありました。

ファイルが生成されたか ls を連打し、メモリの残りが気になって free を打ち直す。

その繰り返しは、watch というコマンドに任せられます。

watch は、指定したコマンドを一定間隔で実行し直して、結果を同じ画面に映し続けてくれる監視係。

この記事では、覚えるオプションを2つに絞って、明日からそのまま使える最小限の watch をまとめました。

watch の基本形

一番シンプルな形は、watch の後ろに実行したいコマンドを書くだけです。

watch date

実行すると画面が切り替わり、2秒間隔で date が実行され続けて、表示がそのたびに更新されます。

画面の一番上には「Every 2.0s: date」のように、実行間隔・コマンド・ホスト名と現在時刻を並べたヘッダー行が付くので、いま何を見張っているのかを見失いません。

やめたいときは Ctrl+C で抜けるだけ。

本記事の実行例の確認環境は、Ubuntu 24.04 のコンテナ(watch from procps-ng 4.0.4)。

間隔を変える(-n)

既定の2秒より細かく、あるいはゆっくり見たいときは -n で秒数を指定します。

watch -n 1 date

これで1秒ごとの更新になり、ヘッダーも「Every 1.0s: date」に変わります。

逆に、ディスク容量のようにゆっくり変わるものは間隔を広げるのがおすすめ。

watch -n 30 'df -h'

短くしすぎると監視対象より watch 自身が負荷になることもあるので、変化の速さに合わせて選びます。

変化した場所を光らせる(-d)

数字がずらりと並ぶ出力では、どこが変わったのかを目で追うだけでひと苦労です。

そこで -d を付けると、前回の実行から変化した部分だけがハイライトされます。

watch -d -n 1 'free -m'

メモリの使用量を映すと、増減したセルだけが反転表示になり、変化が一目で追えるようになる。

じわじわ増え続けるプロセスを探すときなど、-d の有無で調査のしやすさがまるで違います。

変わった瞬間に止める(-g)

画面を見張り続けるのではなく、変化があったら手元に戻ってきてほしい場面もあるはずです。

そんなときは -g を付けると、出力が前回の実行から変わった時点で watch 自身が終了してくれる。

watch -g -n 5 'ls -l output.csv'

ファイルのサイズや更新時刻が動いた瞬間に抜けるので、終了を合図に次の作業へ移れます。

手元の確認では、別プロセスがファイルへ追記した直後に watch がすっと終了しました。

「変わるまで待つ」を人間の根気ではなくコマンドに肩代わりさせる、地味ながら効くオプションです。

パイプを使うならクォートで包む

watch に渡すコマンドでパイプやリダイレクトを使うときは、注意が一つ。

watch 'ps aux | grep nginx'

このようにクォートで囲まないと、パイプから後ろが watch の外側で解釈されてしまい、意図と違う動きになります。

watch に見張らせたい一連の処理は、丸ごとクォートで一つに包むのが鉄則です。

もう一つ、シェルに設定したエイリアスは watch の中では効かないので、素のコマンド名で書くのが安全。

ちなみに、Windows の Git Bash には watch そのものが入っていません(手元の環境で確認)。

watch が使えない環境でも、while ループで似たことはできます。

while true; do clear; date; sleep 1; done

ヘッダー表示や -d のハイライトはありませんが、急場をしのぐには十分な代打です。

プロセスの調べ方そのものは、こちらで基本から整理しています。

ps・kill入門|動いているプロセスを調べて止める基本

私の使いどころ

私が実際に watch へ任せている場面は、だいたい次の三つです。

一つ目は、バッチ処理の出力待ちで、生成されるファイルのサイズを見張るとき。

watch -n 1 'ls -l output.csv'

サイズが増えていれば処理は生きている、と手を止めずに判断できます。

二つ目は、ログ集計やバックアップ中にディスクの空きを定点観測するとき。

三つ目が、先ほどの -d と free を組み合わせたメモリの張り込みです。

どれも「たまに画面を見に行く」だけの仕事なので、打ち直しの手間ごと watch に渡してしまうと集中が途切れません

使用中のポートを見張るときにも同じ手が使えるので、ss・lsof の記事と合わせて読むと応用が効きます。

使用中ポートを特定する|ss・lsof・fuserの使い分け

ディスク容量の読み方は、df・du の記事が続きになります。

df・du入門|ディスクの空きと使用量を調べる基本

最後に

watch は、-n で間隔・-d で変化の強調、この2つさえ覚えれば日常の監視はほぼ足りるでしょう。

同じコマンドを打ち直している自分に気づいたら、それは watch に任せる合図。

細かい仕様を確かめたいときは、watch(1) のマニュアルが一次情報として頼りになります。

以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA