サーバーのメモリ不足をメールで通知するシェルスクリプトの作成方法
bashに代表されるUnix/Linuxのシェルスクリプトの大きな魅力は、条件分岐や繰り返し処理、関数の定義など、一般的なプログラミング構文を幅広くサポートしている点です。複数のコマンドを1つのファイル(シェルスクリプト)にまとめて記述し、まとめて実行することができます。
これにより、信頼性の高い効率的なシステム管理が可能になります。日次バックアップやシステム更新といった定型タスクの自動化、独自のコマンドやツールの作成など、活用範囲は非常に広いです。さらに、サーバー上で何が起きているかを常に把握するための監視スクリプトを作ることもできます。
サーバーを構成する重要な要素のひとつがメモリ(RAM)であり、システム全体のパフォーマンスに大きく影響します。
本記事では、サーバーの空きメモリが少なくなった際に、システム管理者へアラートメールを送信する、小さくても実用的なシェルスクリプトを紹介します。
このスクリプトは、1GB(約990MB)程度とメモリ容量が小さいLinux VPS(仮想専用サーバー)を監視する場合に特に役立ちます。
検証環境について
今回の検証では、以下の環境を使用しました。
- mailxユーティリティがインストールされ、Postfixメールサーバーが正常に動作しているCentOS/RHEL 7の本番サーバー
alertmemory.sh の仕組み
alertmemory.shは次のような流れで動作します。まず free コマンドで空きメモリ容量を取得し、それが指定した閾値(本ガイドでは100MB)以下であるかどうかを判定します。この閾値は「許容できる最小の空きメモリ量」の目安となります。
条件が真であった場合は、サーバーのRAMを大量に消費している上位プロセスの一覧を生成し、指定したメールアドレス宛てにアラートメールを送信します。
注意: スクリプトをそのまま使う前に、お使いのLinuxディストリビューションの要件に合わせて修正が必要な場合があります(特にメール送信ユーティリティの種類やオプション指定など)。
サーバーメモリをチェックするシェルスクリプト
#!/bin/bash
#######################################################################################
#Script Name :alertmemory.sh
#Description :send alert mail when server memory is running low
#Args :
#Author :Aaron Kili Kisinga
#Email :admin@wsxdn.com
#License : GNU GPL-3
#######################################################################################
## メール関連の変数を宣言
## メール件名
subject="Server Memory Status Alert"
## 送信元アドレス
from="admin@wsxdn.com"
## 送信先アドレス
to="admin@wsxdn.com"
## CC送信先
also_to="admin@wsxdn.com"
## 空きメモリ合計サイズをMB単位で取得
free=$(free -mt | grep Total | awk '{print $4}')
## 空きメモリが100MB以下かどうかをチェック
if [[ "$free" -le 100 ]]; then
## メモリを大量消費している上位プロセスを取得し一時ファイルに保存
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head >/tmp/top_proccesses_consuming_memory.txt
file=/tmp/top_proccesses_consuming_memory.txt
## 空きメモリが不足している場合にメールを送信
echo -e "Warning, server memory is running low!\n\nFree memory: $free MB" | mailx -a "$file" -s "$subject" -r "$from" -c "$to" "$also_to"
fi
exit 0
スクリプトを /etc/scripts/alertmemory.sh として作成したら、実行権限を付与し、cron.hourlyディレクトリにシンボリックリンクを作成します。
# chmod +x /etc/scripts/alertmemory.sh # ln -s -t /etc/cron.hourly/alertmemory.sh /etc/scripts/alertmemory.sh
この設定により、サーバーが稼働している限り、上記のスクリプトは1時間ごとに自動実行されます。
動作テストのコツ
ヒント: スクリプトが意図どおりに動作するか確認したい場合は、閾値を少し高めに設定してメールが送信されやすい状態にし、cronの実行間隔も約5分などの短い間隔に変更するとよいでしょう。
そのうえで、スクリプト内でも使用している free コマンドをコマンドラインから何度か実行し、空きメモリの推移を目視で確認します。正しく動作することを確認できたら、実際に運用したい閾値と実行間隔の値に戻してください。
下のスクリーンショットは、実際に届いたアラートメールのサンプルです。
まとめ
以上、サーバーのメモリ(RAM)が不足した際にシステム管理者へアラートメールを送信するためのシェルスクリプトの使い方を解説しました。VPSなどメモリ容量の小さなサーバーの監視にぜひ活用してください。本トピックに関するご意見やフィードバックがあれば、ぜひお聞かせください。
-
Excelで条件を満たしたときにメールを自動送信する3つの方法【VBAマクロ】
メールの自動送信機能を活用すれば、あらかじめ作成しておいたメッセージをユーザーへ一括配信でき、作業時間を大幅に節約できます。特に、指定したタイミングでメールを送れる仕組みは、見込み顧客とのエンゲージメント向上に非常に効果的です。中でも最も価値が高いのは、「適切な相手に、適切なタイミングで通知を届けられる」という点でしょう。 本記事では、Excel VBAマクロを使って、条件を満たしたときに自動的にメールを送信するさまざまな方法をご紹介します。記事内のサンプルブックをダウンロードして、実際に練習することも可能です。 条件を満たしたときにExcelからメールを自動送信する3つの方法 業務では「特定
-
匿名でメールを送信する方法|プライバシーを守る3つの実践テクニック
Gmail、Outlook、Yahoo!メールなど、大手インターネット企業が運営する高機能なメールクライアントは市場に数多く存在します。しかし、こうしたプラットフォームはユーザーの行動や他のオンライン活動を追跡・監視しようとするため、多くのユーザーはオンラインのプライバシーに対して不安を感じています。 通常、メールは双方向のコミュニケーション手段として使われますが、身元を明かさずにメールを送受信したい場面もあるでしょう。その理由は完全に正当なものであり得ます。単にプライバシーを大切にしたい、アカウント登録時に個人情報を提供したくない、あるいは決して追跡されたくない機密性の高いメールを送りたい—