1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

[Linux]シェルスクリプトとcronを利用してディスク監視を自動化してみた

1
Last updated at Posted at 2026-05-26

0. 目次

  1. 初めに
  2. 環境
  3. スクリプト作成
  4. Crontabで自動化
  5. 動作確認
  6. トラブルシューティング
  7. 終わりに

1. 初めに

Linux学習の続きで、シェルスクリプトでサーバーモニタリング、Crontabでリアルタイム監視環境を構築してみました。

2. 環境

Ubuntu 26.04 LTS Server

3. スクリプト作成

1. ディスク・メモリ使用量の取得

スクリプト保存用のフォルダーを作成後、そのフォルダーに移動します。

mkdir scripts
cd scripts

モニタリング用のスクリプトを作成します。

nano monitor.sh

#!/bin/bash

echo "-----------ステータス確認-----------"

echo "1. ディスク使用率: "
df -h / | awk 'NR==2 {print "使用率: " $5}'

echo ""

echo "2. メモリ使用量: "
free -m | awk 'NR==2 {print "使用中: " $3 "MB / 全体: " $2 "MB"}'

echo "-----------------------------------"

作成した後、ls -lで現在ディレクトリーのリストを確認します。
image.png

-rw-rw-r-- ← 個々の部分を確認すると、まだ実行権限がないことを確認できます。
スクリプトを実行するため、chmodで権限を追加します。

chmod 764 monitor.sh

image.png

実行権限を追加すると xが追加されファイルの色も変わりました。
早速 ./monitor.shで実行してみます。
image.png
正常に結果が出力されました!


2. IF文

次はディスク使用率が 50%を超えた場合、警告をするようにスクリプトを作成してみます。
先のmonitor.shの内容を以下のように変更します。

#!/bin/bash

echo "-----------ステータス確認-----------"

DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')

echo "現在のディスク使用率 : ${DISK_USAGE}%"

echo ""

if [ "$DISK_USAGE" -ge 50 ]; then
    echo "[警告]ディスク使用率が50%を超えています。確認してください!"
else
    echo "[OK]ディスク使用率は平気です。"
fi

echo "-----------------------------------"

実行結果 ↓↓↓
image.png


3. メール通知

IF文を応用して50%以上であれば、警告メールを送信するように設定します。

monitor.shの内容を以下のように変更します。

#!/bin/bash

echo "-----------ステータス確認-----------"

DISK_USAGE=$(df -h / | awk 'NR==2 {print $5}' | tr -d '%')

echo "現在のディスク使用率 : ${DISK_USAGE}%"

echo ""

if [ "$DISK_USAGE" -ge 50 ]; then
    echo "[警告]ディスク使用率が50%を超えています。確認してください!"
    SUBJECT="[警告]サーバー(Web-1)のディスク容量警告"
    BODY="サーバー(Web-1)のディスク使用率が${DISK_USAGE}%に達しています。確認してください。"

    echo "$BODY" | mail -s "$SUBJECT" 自分のメールアドレス
fi

echo "-----------------------------------"

スクリプトを実行してみます。
image.png
スクリプトに入力した内容でメールが届いています。(Gmailの場合迷惑メールも確認)

4. Crontabで自動化

スクリプトを作成したが、これを一々実行すると意味がないと思います。
crontabを利用して、自動化かつリアルタイム監視ができるように設定します。

crontab -e

上記のコマンドを実行し、crontab設定ファイルが開けたら一番最後の行に下記を追記します。

*/5 * * * * /home/ユーザ名/scripts/monitor.sh  #5分ごとに実行

追記後、問題ない場合は crontab: installing new crontabと出力されます。

5. 動作確認

image.png

メールを確認してみると、5分ごとにメールが届いています。

6. トラブルシューティング

  • IF文
    IF文を作成後、実行するとエラーが出ました。
    その原因を確認してみると、["$DISK_USAGE" -ge 50]; thenと書きまして、カッコの前後に空白を入れなかったのが原因でした。

    正しい分 : [ "$DISK_USAGE" -ge 50 ]; then

7. 終わりに

今回の構築では、シェルスクリプトを利用して簡単な監視スクリプトを作成し、cronで自動実行することでリアルタイム監視のような動きを確認することができました。
仕事で確認してた警告メールを自分の手で再現してみることで仕組みについてさらに理解することができました。
今後はCPU・メモリ監視、ログ監視なども追加しながら、少しずつ改善していきたいと思います。

補足

  • df -h / | awk 'NR==2 {print "使用率: " $5}'
    df -h / : /(ルートディレクトリ)のディスク使用状況を確認するコマンド
    awk 'NR==2 {print "使用率: " $5}' :
    awk : 行列で出力内容を選定
    NR==2 : 2行目
    $5 : 5列目
    df -h /の実行結果 ↓↓↓
    image.png
    2行目 : /dev/mapper/ubuntu--vg-ubuntu--lv
    5列目 : 54%
  • メール通知
    メール通知のためにはパッケージのインストールが必要です。
sudo apt update
sudo apt install mailutils -y
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?