ウェブサイト検索

メモリが少なくなったときに電子メール警告を送信するシェル スクリプト


bash などの Unix/Linux シェル プログラムの強力な側面は、意思決定、コマンドの繰り返し実行、新しい関数の作成などを可能にする一般的なプログラミング構造の驚くべきサポートです。シェルスクリプトと呼ばれるファイルにコマンドを記述し、まとめて実行できます。

これにより、信頼性が高く効果的なシステム管理手段が提供されます。スクリプトを作成して、毎日のバックアップやシステム更新などのタスクを自動化できます。新しいカスタム コマンド/ユーティリティ/ツールなどを作成します。サーバー上で何が起こっているかを把握するために役立つスクリプトを作成できます。

サーバーの重要なコンポーネントの 1 つはメモリ (RAM) であり、システム全体のパフォーマンスに大きな影響を与えます。

この記事では、サーバーのメモリが不足している場合に 1 人以上のシステム管理者に警告メールを送信するための、小さいながらも便利なシェル スクリプトを紹介します。

このスクリプトは、少量のメモリ (たとえば、1 GB 程度) を備えた Linux VPS (仮想プライベート サーバー) を監視する場合に特に役立ちます (約990MB)。

テスト環境のセットアップ

  1. CentOS/RHEL 7 実稼働サーバーと mailx ユーティリティがインストールされ、Postfix メール サーバーが動作するようにインストールされています。

alertmemory.sh スクリプトは次のように動作します。まず空きメモリ サイズをチェックし、次に空きメモリの量が指定されたサイズ (100 MB) 以下であるかどうかを判断します。このガイドの目的のため)、許容可能な最小空きメモリ サイズのベンチマークとして使用されます。

この条件が true の場合、サーバー RAM を消費する上位 10 のプロセスのリストが生成され、指定された電子メール アドレスに警告電子メールが送信されます。

: Linux ディストリビューションの要件を満たすには、スクリプトにいくつかの変更を加える必要があります (特にメール送信ユーティリティ、適切なフラグを使用する)。


#!/bin/bash 
#######################################################################################
#Script Name    :alertmemory.sh
#Description    :send alert mail when server memory is running low
#Args           :       
#Author         :Aaron Kili Kisinga
#Email          :[email 
#License       : GNU GPL-3	
#######################################################################################
## declare mail variables
##email subject 
subject="Server Memory Status Alert"
##sending mail as
from="[email "
## sending mail to
to="[email "
## send carbon copy to
also_to="[email "

## get total free memory size in megabytes(MB) 
free=$(free -mt | grep Total | awk '{print $4}')

## check if free memory is less or equals to  100MB
if [[ "$free" -le 100  ]]; then
        ## get top processes consuming system memory and save to temporary file 
        ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head >/tmp/top_proccesses_consuming_memory.txt

        file=/tmp/top_proccesses_consuming_memory.txt
        ## send email if system memory is running low
        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 時間ごとに実行されることを意味します。

ヒント: 意図したとおりに動作しているかどうかをテストしたり、ベンチマーク値を少し高く設定して電子メールの送信を簡単にトリガーしたり、短い間隔を指定したりできます。約5分。

次に、スクリプトで提供されている無料のコマンドを使用して、コマンド ラインからチェックを続けます。動作していることを確認したら、使用する実際の値を定義します。

以下は、アラート電子メールのサンプルを示すスクリーンショットです。

それだけです!この記事では、サーバーのメモリ (RAM) が不足した場合に、シェル スクリプトを使用してシステム管理者に警告メールを送信する方法を説明しました。このトピックに関するご意見がございましたら、以下のフィードバック フォームからお知らせください。