0. 目次
- 初めに
- 環境
- スクリプト作成
- Crontabで自動化
- 動作確認
- トラブルシューティング
- 終わりに
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で現在ディレクトリーのリストを確認します。

-rw-rw-r-- ← 個々の部分を確認すると、まだ実行権限がないことを確認できます。
スクリプトを実行するため、chmodで権限を追加します。
chmod 764 monitor.sh
実行権限を追加すると xが追加されファイルの色も変わりました。
早速 ./monitor.shで実行してみます。

正常に結果が出力されました!
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 "-----------------------------------"
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 "-----------------------------------"
スクリプトを実行してみます。

スクリプトに入力した内容でメールが届いています。(Gmailの場合迷惑メールも確認)
4. Crontabで自動化
スクリプトを作成したが、これを一々実行すると意味がないと思います。
crontabを利用して、自動化かつリアルタイム監視ができるように設定します。
crontab -e
上記のコマンドを実行し、crontab設定ファイルが開けたら一番最後の行に下記を追記します。
*/5 * * * * /home/ユーザ名/scripts/monitor.sh #5分ごとに実行
追記後、問題ない場合は crontab: installing new crontabと出力されます。
5. 動作確認
メールを確認してみると、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 /の実行結果 ↓↓↓

2行目 : /dev/mapper/ubuntu--vg-ubuntu--lv
5列目 : 54%
- メール通知
メール通知のためにはパッケージのインストールが必要です。
sudo apt update
sudo apt install mailutils -y


