時間のかかる解析が終わったらメールを自動で送られてくるようにしたい。そんなときにやってみた諸々設定の備忘録。コンピューター上にメールサーバを建てずともGmail様の力を借りてできます。
共用PCならメールシステムを共用部に設定すれば、各ユーザーが好きな受取先でメールを受け取れます。
送信元として使うGmailの準備
まず送信元にするGmailアカウントを作成しましょう。(ラボの共用PCならあなたのプライベートアカウントは使わないほうがいいです。)
アプリパスワードを取得する https://security.google.com/settings/security/apppasswords
テキトウなアプリ名を設定してパスワードをもらう。必ずメモる!!
メールシステム(msmtp)の設定
ここでは管理者権限を持っている人が、コンピューターの根っこにmsmtpを設定することを想定しています。
インストール
sudo apt install msmtp msmtp-mta
BashGmailと紐づけ設定
cd /etc
touch msmtprc
nano msmtprc
## 以下を編集してコピペ
Bash> msmtprc
defaults
port 587
tls on
tls_trust_file /etc/ssl/certs/ca-bundle.crt
# Gmail
account gmail
host smtp.gmail.com
from hogehoge@gmail.com
## ↑送信元のアドレス
auth on
user hogehoge@gmail.com
## ↑送信元のアドレス
password abcdabcdabcdabcd
## ↑さっき取得したアプリパスワード(ハイフンいらん)
# Set a default account
account default : gmail
Bashテスト
echo "Dekita!" | msmtp [あなたのアドレス]
Bashこれが無事に届けば成功です。
Jobが終わったらメールくるようにする
例)gzip hogehoge.gz が終わったら「gzip hogehoge.gz done!」とメールがほしい
cmd="gzip hogehoge.gz";nohup $cmd && (echo $cmd done! | msmtp your@mail) > ./cmd &
Bash例)gzip hogehoge.gz が終わったらちょっと凝ったメールがほしい
> test.mail
From:Hogehoge
Subject:Job done
Job ga owattawayo
Bashcmd="gzip hogehoge.gz";nohup $cmd && (cat test.mail | msmtp your@mail) > ./cmd &
Bashディスクがいっぱいになったら通知くるようにしてみる
ディスク容量が90%超えたらメールが送られてくるようにしてみる。1時間ごとに監視して、一度通知を送ったら24時間は再通知を送らないようにしてみる。
監視用スクリプトの設定
cd /etc
touch monitor.sh
nano monitor.sh
## 以下を編集してコピペ
Bash> monitor.sh
#!/bin/sh
#monitor.sh
To=[あなたのアドレス]
# Disk
MAX_SPACE=90
## Read Disk Timestamp file
TIMESTAMP_FILE="/tmp/monitoring_disc_last_alert.timestamp"
## Check if 24 hours have passed since the last alert
send_alert=true
if [ -f "$TIMESTAMP_FILE" ]; then
last_alert=$(cat $TIMESTAMP_FILE)
current_time=$(date +%s)
if [ $(($current_time - $last_alert)) -lt 86400 ]; then
send_alert=false
fi
fi
## Check Disk
if $send_alert; then
USAGE=$(df -h | grep '/dev/sda3' | awk '{print $5}' | sed 's/%//g')
ALL=$(df -h | grep '/dev/sda3' | awk '{print $2}')
USED=$(df -h | grep '/dev/sda3' | awk '{print $3}')
if [ $USAGE -gt $MAX_SPACE ]; then
echo -e "Subject: Disk Space Alert on $(hostname)\n\nDisk space running low \non $(hostname) at $(date):\n${USAGE}% ($USED/$ALL)" | msmtp $To
date +%s > $TIMESTAMP_FILE
send_alert=false
fi
fi
Bash定期的に実行
1時間毎に上のスクリプトを実行する
sudo crontab -e
# 以下をコピペ
0 */1 * * * bash /etc/monitor.shBash
Bash
コメント