Ubuntuでは任意のジョブ(自分が書いたスクリプトを含む)を任意の時間に実行することができます。
今回は、「ディスク使用量が85%を超えたらメール通知を送信する」というスクリプトを毎日朝1時に実行する、というケースを例に設定方法を説明します。
Postfixを使って任意のGmailから任意のGmailにメールを送信するようにしています。
設定手順
- メール通知に必要なパッケージをインストールする。インストール時に聞かれる設定では
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
- メール送信元のログイン情報を入力するための
/etc/postfix/sasl_passwd
を作成します。
sudo nano /etc/postfix/sasl_passwd
- メール送信元のログイン情報を入力して閉じます。自分は新しいGoogleアカウントを作成し、そのログイン情報を入力しました。
[smtp.gmail.com]:587 <username>@gmail.com:<password>
- ログイン情報をデータベース化し、パーミッションを変更します。
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
- Postfixの設定ファイルを開きます。
sudo nano /etc/postfix/main.cf
- 末尾に以下を追記して設定ファイルを閉じます。
smtp_use_tls = yes
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_tls_security_options = noanonymous
- Postfixをリロードします。
sudo systemctl reload postfix
- 以下のコマンドでメール送信が可能であることをテストします。送信元が作成したばかりのGoogleアカウントだとセキュリティに引っかかるので、Gmail側でAllow less secure app accessの設定をONにしておきます。それでも送信できなければログファイル
/var/log/mail.log
を確認してください。
echo "Test" | mail <メール送信先>@gmail.com
- メール送信のスクリプトファイルを作る。
sudo nano /root/checkssdspace.sh
- 「ディスク使用料が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
- Cronの編集画面を開く。
sudo crontab -e
- 以下の行を追記して、毎日朝1時に作成したスクリプトが実行されるようにする。
(>>をつけることで、実行した結果をログとして残すことができます)
0 1 * * * bash /root/checkssdspace.sh >> /var/log/checkssdspace.log