定期的にswap領域使用率を取得し、閾値を超えたら再起動させたい

#!/bin/bash

# 日付取得用
YMD=$(date +"%Y/%m/%d %p %I:%M:%S")

# スワップ閾値 100%=100で記載
SWAP_LIMIT=80

# メールの受信者と送信者
EMAIL="[email protected]" # 送信先メールアドレスを指定
SENDER_EMAIL="[email protected]"  # 送信元メールアドレスを指定

# スワップ使用率取得
SWAP_USED=$(free | grep Swap | awk '{ print int($3/$2*100) }')

# ログファイルのパス
SWAP_LOG="/root/swap_limit.log"

# ログ情報の生成
LOG_INFO="Date: $YMD, Swap Usage: $SWAP_USED%"

# ログファイルの削除
clean_up_logs() {
    find /root -maxdepth 1 -name "swap_limit.log" -mtime +1 -exec rm -f {} \;
}

if [ "$SWAP_USED" -gt "$SWAP_LIMIT" ]; then
    echo "Swap is over than $SWAP_LIMIT%. Sending email and server will restart soon."
    echo "$LOG_INFO, Action: Server Restart" >> "$SWAP_LOG"
    echo "Swap usage was over than $SWAP_LIMIT%. Sever restarted at $YMD" | mail -s "Server Restart Alert" -r "$SENDER_EMAIL" "$EMAIL"
    # サーバー再起動
    reboot
else
    echo "Swap usage is $SWAP_USED%"
fi

私のサーバーではこのbashスクリプトをcronjobを用いて1分に1回動かしています。

1分に1回swap領域の使用率が80%を超えた場合、/root/swap_limit.logにログを残し、メールを送信したうえでサーバーを再起動させます。それ以外の時に動くとただ現在のスワップ領域の使用率を出力します。

swap_limit.logのサンプル

Date: 2023/12/04 PM 05:33:57, Swap Usage: 97%, Action: Server Restart

ご参考までに

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です