コンテンツへスキップ

ディスク容量が少なくなったらメール通知

Ubuntuでは任意のジョブ(自分が書いたスクリプトを含む)を任意の時間に実行することができます。

今回は、「ディスク使用量が85%を超えたらメール通知を送信する」というスクリプトを毎日朝1時に実行する、というケースを例に設定方法を説明します。

Postfixを使って任意のGmailから任意のGmailにメールを送信するようにしています。

設定手順

  1. メール通知に必要なパッケージをインストールする。インストール時に聞かれる設定ではInternet with smarthostを選択します。自分はsystem mail nameにgure-it-memo.comを入力しました。SMTP relay hostには[smtp.gmail.com]:587を入力します。
sudo apt update && sudo apt install mailutils postfix -y
  1. メール送信元のログイン情報を入力するための/etc/postfix/sasl_passwdを作成します。
sudo nano /etc/postfix/sasl_passwd
  1. メール送信元のログイン情報を入力して閉じます。自分は新しいGoogleアカウントを作成し、そのログイン情報を入力しました。
[smtp.gmail.com]:587 <username>@gmail.com:<password>
  1. ログイン情報をデータベース化し、パーミッションを変更します。
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
  1. Postfixの設定ファイルを開きます。
sudo nano /etc/postfix/main.cf
  1. 末尾に以下を追記して設定ファイルを閉じます。
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
  1. Postfixをリロードします。
sudo systemctl reload postfix
  1. 以下のコマンドでメール送信が可能であることをテストします。送信元が作成したばかりのGoogleアカウントだとセキュリティに引っかかるので、Gmail側でAllow less secure app accessの設定をONにしておきます。それでも送信できなければログファイル/var/log/mail.logを確認してください。
echo "Test" | mail <メール送信先>@gmail.com
  1. メール送信のスクリプトファイルを作る。
sudo nano /root/checkssdspace.sh
  1. 「ディスク使用料が85%を超えたらメール通知を送信する」というスクリプトを書き込んで保存する。
#!/bin/bash

# 監視するパーティション(df -hで確認)
CHECK_PARTITION=nvme0n1p2
# ディスク使用率閾値(%)
LIMIT=85
# 通知先メールアドレス
MAILADDRESS="test@test.com"

# ディスク使用量を取得
CHECK_PERCENT=`df -h | grep $CHECK_PARTITION | awk '{print $5}' | sed -e '$s/.$//'`
# メール件名
SUBJECT="[WARN] $CHECK_PARTITION is ${CHECK_PERCENT}% full"

# ディスク使用量>閾値であればメール通知
if [ $CHECK_PERCENT -gt $LIMIT ]
  then
    date
    echo "Condition met. Sending email..."
    df -h | mail -s "$SUBJECT" $MAILADDRESS
fi
  1. Cronの編集画面を開く。
sudo crontab -e
  1. 以下の行を追記して、毎日朝1時に作成したスクリプトが実行されるようにする。
    (>>をつけることで、実行した結果をログとして残すことができます)
0 1 * * * bash /root/checkssdspace.sh >> /var/log/checkssdspace.log