【Linux】watchコマンドの使い方!定期実行でリアルタイム監視する方法

【Linux】watchコマンドの使い方!定期実行でリアルタイム監視する方法

PR Amazonのアソシエイトとして、ITナレッジライフは適格販売により収入を得ています。

記事の文字数:3,780

Linuxのwatchコマンドを使って任意のコマンドを定期実行・リアルタイム監視する方法を解説します。CPUやメモリの使用率、ログファイルの更新などを一定間隔で自動更新表示させ、インフラ監視やトラブルシューティングを効率化する実用的なオプションを分かりやすく紹介。

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

初心者向け

わかばちゃんと学ぶ サーバー監視

難易度
実用性
読みやすさ

マンガと図解が中心で圧倒的に読みやすい。負荷調査の手法がスッと理解できるようになります。

新しいLinuxの教科書 第2版

難易度
実用性
読みやすさ

一生モノの基礎知識が身につく定番書です。

ゼロからわかる Linuxコマンド200本ノック―基礎知識と頻出コマンドを無理なく記憶に焼きつけよう!

難易度
実用性
習得度

アウトプット重視で記憶に定着しやすい。反復練習でLinux操作が自由自在になります。

エンジニア1年生のための世界一わかりやすいLinuxコマンドの教科書

難易度
実用性
読みやすさ

LinuxLinux [リナックス / ライナックス]オープンソースのOSカーネルサーバーの運用管理や開発を行っていると、「特定のコマンドを数秒おきに実行して変化を追いかけたい」「リソースの変動やログの更新を一定間隔で確認したい」という場面に直面することがあります。毎回手動でコマンドを入力し直すのは手間がかかり、確認作業の効率も低下してしまいます。

Linuxの watch コマンドを使用すれば、任意のコマンドを指定した時間間隔で繰り返し実行し、その結果をコマンドライン(CLICLI [シーエルアイ]Command Line Interface。コマンドで操作するインターフェース)画面に自動更新して表示させることができます。

この記事でわかること

  • watch コマンドの基本的な構文と実行方法がわかる
  • 実行間隔の変更や差分のハイライトなど、実務で役立つオプションを習得できる
  • プロセス監視やログファイルのチェックなど、具体的な活用事例を実践できるようになる

確認した環境

本記事で解説する手順やコマンドは、以下の環境で動作を確認しています。

watchコマンドとは?定期実行・リアルタイム監視の基本

watch コマンドは、指定したプログラムやコマンドを定期的に実行し、その出力を全画面に表示し続けるためのユーティリティです。

通常のコマンドは1回実行されるとプロンプトが戻ってきますが、watch を使うことで、例えば「2秒ごとに df -h を実行してディスク残量の変化を監視する」といったことが容易に実現できます。

インフラ監視やトラブルシューティングにおいて、状態の変化を視覚的に捉えるために活用されます。なお、watch はあくまでコマンドを一定間隔で再実行して表示を更新するツールであり、厳密なリアルタイム処理や、変化の瞬間を漏れなく検知する仕組みではありません。

watchコマンドの基本的な使い方と書き方

watch コマンドの基本的な構文は以下の通りです。

Terminal window
watch [オプション] 実行したいコマンド

オプションを何も指定せず実行した場合のデフォルトでは、2秒間隔 でコマンドが繰り返し実行されます。終了するには、キーボードの Ctrl + C を押します。

例えば、現在のディレクトリ内のファイル一覧を2秒おきに監視したい場合は、以下のように実行します。

Terminal window
watch ls -l

実行すると、画面がクリアされてコマンドの出力結果が表示され、左上の隅には実行間隔や現在の時刻、コマンド名などのヘッダー情報が表示されます。

コマンドの実行間隔を変更する(-nオプション)

デフォルトの2秒間隔ではなく、より短い間隔や長い間隔で実行したい場合は -n(または --interval)オプションを使用します。

例えば、1秒間隔でプロセスの一覧(ps コマンドなど)を監視したい場合は以下のように指定します。

Terminal window
# 1秒間隔でプロセスを監視する
watch -n 1 ps aux
# 0.5秒間隔で現在時刻を確認する(1秒未満は小数点で指定できる)
watch -n 0.5 date

指定できる間隔は 0.1秒以上 です。Ubuntu 24.04 の watch では、-n 0.05 のように0.1秒未満を指定すると0.1秒に補正されます(実機で、画面のヘッダーが Every 0.1s になることを確認しています)。

通常、watch は前回のコマンドの実行が終わってから指定した秒数だけ待って次を実行します。そのため、実際の更新周期は「指定した間隔 + コマンドの処理時間」程度になり、処理に時間がかかるコマンドでは指定値より長くなります。

前回の実行開始時刻を基準に、指定間隔ごとの実行を試みたい場合は -p(--precise)オプションを併用します。ただし、処理時間が指定間隔を超える場合は、-p を付けても間隔が守られるとは限りません。

また、短い間隔で実行し続けるとシステムに負荷がかかるため、負荷状況に注意する必要があります。

変更箇所をハイライトしてわかりやすくする(-dオプション)

前回実行時の出力結果と比較して、変化があった部分(差分)をハイライト表示させたい場合は -d(または --differences)オプションが便利です。

Terminal window
watch -d free -m

このオプションを付与すると、数値が増減した箇所や、コマンド出力の変化した部分が反転表示(ハイライト)されるため、リソース使用量やファイル一覧などの変化を目視で素早く捉えることができます。

デフォルトでは直前の更新との差分のみがハイライトされますが、--differences=permanent と指定すると、最初の実行以降に一度でも変化した箇所をハイライトしたまま表示し続けます。

対象コマンドが非ゼロで終了した場合に更新を停止する(-eオプション)

通常、watch コマンドは対象のコマンドが非ゼロの終了ステータスを返しても、定期実行を継続します。対象のコマンドが非ゼロの終了ステータスで終了した時点で画面の更新を止め、そのときの出力を確認したい場合は、-e(または --errexit)オプションを使用します。

Terminal window
watch -e ping -c 1 192.168.1.1

この例では、ping の終了ステータスが非ゼロになった場合に画面の更新が停止し、「command exit with a non-zero status, press a key to exit」と表示されます(Ubuntu 24.04 の watch で確認したメッセージです)。

その状態で何かキーを押すと watch が終了します。非ゼロになった時点の出力を画面に残せるため、一時的な障害の検知や原因の確認に役立ちます。

ただし、非ゼロの終了ステータスは、必ずしもプログラムの異常を意味するわけではありません。対象のコマンドがどのような条件で非ゼロを返すのかを理解したうえで使用してください。

実務で役立つwatchコマンドの活用事例

実際のシステム運用やトラブルシューティングの現場において、watch コマンドがどのように活用されるのか、具体的な事例を紹介します。

プロセスやCPU・メモリの使用率を監視する

サーバーのリソース消費状況や特定プロセスの稼働状態を、一定間隔で継続的に確認する際によく使われます。

Terminal window
# 3秒おきにメモリとスワップの使用状況を監視する
watch -n 3 free -h
# 特定のプロセス(例: nginx)の稼働状況を2秒おきに監視する
watch -n 2 pgrep -lf nginx

これにより、高負荷時のリソース変動や、プロセスが意図せず停止したことなどをすばやく把握できます。ただし、pgrep で確認できるのはプロセスの存在であり、サービスが正常に応答していることまでは保証されません。

ログファイルやディレクトリの増減をチェックする

ログファイルへの追記を継続的に追いかけたい場合は、tail -f が適しています。ログローテーションによってファイルが置き換えられた後も、同じパスのファイルを追跡したい場合は tail -F を使用します。

一方、watch は、ディレクトリ内のファイル一覧やサイズなど、一定間隔で取得した状態の変化を確認する用途に向いています。

Terminal window
# 2秒おきにディレクトリ内のファイル一覧やサイズの変化を確認する
watch -n 2 ls -lh /var/log/nginx/
# ログファイルへの追記を継続的に追跡する
tail -f /var/log/syslog
# ローテーション後も同じパスのログファイルを追跡する
tail -F /var/log/syslog

なお、watch -n 1 "tail -n 10 /var/log/syslog" のように指定すれば、1秒ごとにログの末尾10行を取得し直して表示することもできます。ただし、これは追記を追跡する方式ではなく、表示を更新する方式です。更新と更新の間にだけ出力された行は見逃す可能性があります。

watch は通常、指定したコマンドを sh -c 経由で実行します。パイプ(|)やリダイレクトなどのシェル構文を含むコマンドは、コマンド全体を引用符で囲むことで、意図したとおりに解釈させることができます。

Terminal window
# nginx を含むプロセス情報を2秒ごとに表示する
# ([n]ginx と書くことで、grep 自身の行が表示されるのを防ぐ)
watch -n 2 'ps aux | grep [n]ginx'

watchコマンドを使う際の注意点とまとめ

watch コマンドは非常に強力で便利なツールですが、利用時にはいくつか注意すべき点があります。

  1. システムの負荷に配慮する 短い間隔(-n 0.1 など)で重い処理を伴うコマンドを実行し続けると、監視しているシステム自体に余計な負荷をかけてしまう原因になります。監視目的に応じて適切なインターバルを設定してください。
  2. シェルの解釈とクォーテーション パイプ(|)やリダイレクトなどのシェル構文を含むコマンドを実行する場合は、コマンド全体を引用符で囲んでください。囲まないと、watch ではなく手元のシェルがパイプなどを解釈してしまい、意図した動作になりません。また、変数展開のタイミングはシングルクォーテーションとダブルクォーテーションで異なります。どのタイミングで展開したいかに応じて使い分けてください。単純なコマンドであれば、必ずしも引用符で囲む必要はありません。
  3. エイリアスの展開 watch は sh -c でコマンドを実行するため、シェルのエイリアスは展開されません。エイリアスを使っている場合は、エイリアスの中身をそのままコマンドとして指定してください。

まとめ

watch コマンドの重要なポイントを振り返ります。

  • コマンドラインで任意のコマンドを定期実行し、出力を一定間隔で更新して確認するための標準的なツールである。
  • オプションなしの場合はデフォルトで2秒間隔で実行される。
  • -n オプションで実行間隔を指定できる(0.1秒以上。0.1秒未満は0.1秒に補正される)。
  • -d オプションを使うことで、出力の差分をハイライトして視認性を高められる。
  • -e オプションにより、コマンドが非ゼロの終了ステータスで終了した時点で更新を停止し、そのときの出力を確認できる。
  • リソース監視やログ・ファイル群の変動チェックなど、インフラ運用やトラブルシューティングの効率化に貢献する。

日々の運用作業や障害切り分けの場面において、watch コマンドを適切に活用することで作業効率を大きく向上させることができます。


以上で本記事の解説を終わります。
よいITライフを!
ITナレッジライフ 運営者
この記事を書いた人

Z (ITナレッジライフ)

現役のITエンジニア。Linux、プログラミング、IT用語など、日々の業務で得た「痒いところに手が届く」技術情報を発信しています。

プロフィールと編集ポリシーを見る →

Linuxユーザにお勧めの本 ↗

最新版

ゼロからはじめるLinuxサーバー構築・運用ガイド 第2版 動かしながら学ぶWebサーバーの作り方

難易度
実用性
最新度

Rocky Linux対応。実際にWebサーバーを公開するまでのプロセスを体験できる、最も確実で実践的なガイドブックです。

人気記事


記事を評価

Thanks!
目次
Scroll to Top