定期的にswap領域使用率を取得し、閾値を超えたら再起動させたい
2023年12月6日9:22 PM
#!/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
ご参考までに