Linux スクリプト メール通知 - git0331-lgtm/Knowledge GitHub Wiki

実行結果

【概要】
1. msmtpパッケージ使用
2. メール送信時の認証(SMTPサーバ)にGoogleのAPIを使用


【前提条件】
1. バックアップ先フォルダへのアクセス権
2. /cifs が作成済み
3. インターネット接続


【機能】
1. バックアップ異常終了をメール通知

pg_dumpコマンド実行結果通知

異常終了時(※1) : 指定メールアドレスにメール通知あり
正常終了時(※2) : 指定メールアドレスにメール通知なし

(※1) pg_dumpコマンドのエラー出力ありの時
(※2) pg_dumpコマンドのエラー出力なしの時


2. バックアップコマンドの戻り値ファイル出力

pg_dumpコマンドの戻り値ファイルを指定フォルダに出力

異常終了時(※1) : ファイル出力あり
正常終了時(※2) : ファイル出力あり

(※1) pg_dumpコマンドの戻り値が0以外の時 
(※2) pg_dumpコマンドの戻り値が0の時


戻り値ファイル出力時 の mountコマンド実行結果通知

異常終了時(※1) : 指定メールアドレスにメール通知あり
正常終了時(※2) : 指定メールアドレスにメール通知なし

(※1) mountコマンドの戻り値が0以外の時 
(※2) mountコマンドの戻り値が0の時


【サーバ設定】
1. パッケージインストール
sudo apt update && sudo apt -y upgrade && sudo apt -y autoremove
sudo apt install msmtp msmtp-mta


2. 設定ファイル作成
sudo vi /etc/msmtprc
↓をコピペ

# Set default values for all following accounts.
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt

# gmail service
account gmail
host smtp.gmail.com
port 587
from [Gmailアドレス]
user [Gmailアドレス]
password [Gmailアプリパスワード]

# Set a default account
account default : gmail


3. 権限変更
sudo chown orca.orca /etc/msmtprc
sudo chmod 600 /etc/msmtprc


【スクリプト設定箇所】
1. pg_dumpメール監視(3-16行)

### pg_dumpメール監視 ###

declare -A MAIL=(
 #0: 実行しない 1: 実行する
 ["Execute"]="1"

 #宛先メールアドレス(ダンプエラー通知)
 ["To"]="" #通知受信メールアドレス

 #変更不要
 ["Contents"]="/tmp/contents.txt" #送信内容
 ["List"]="/tmp/list.txt" #バックアップフォルダ内リスト
 ["DumpLog"]="/tmp/dump.log" #pg_dumpエラー出力先
)


2. バックアップ戻り値ファイル出力(18-41行目)

### バックアップ戻り値ファイル出力 ###

declare -A WINDOWS=(
 #0: 実行しない 1: 実行する
 ["Execute"]="1"

 #ファイル出力先
 ["DEVICES"]="-t cifs //192.168.5.40/result"

 #宛先メールアドレス(マウントエラー通知)
 ["To"]="" #通知受信メールアドレス

 #マウントオプション 
 #基本的に変更不要 (ファイル出力先をユーザ認証が必要なフォルダに指定する場合に変更)
 #例 : NAS上のアクセス制限が有効なフォルダ・パスワード保護共有が有効なWindows端末等
 
 ["OPTION"]="-o username=ID,password=PASSWORD,gid=1000,uid=1000"
 
 #変更不要
 ["FOLDER"]="/cifs" #マウントポイント
 ["RETVAL"]="0" #マウント戻り値の格納用
 ["DumpLog"]="/tmp/dumpReturnVal.log" #pg_dump戻り値出力先
)


3. バックアップ保存媒体・バックアップ対象・医療機関名・保存先の指定(42-103行目)

#バックアップ対象 0:ORCA 1:ORCA+REMORA+Dolphin
BACKUPTYPE="0"

#医療機関名
NAME=""

#バックアップ媒体 0:ローカル 1:外部記憶装置(HDD・USB等) 2:共有フォルダ
MEDIA="2"

if [ "$MEDIA" = "0" ] ; then

 FOLDER="/home/orca"
 COMENT_01="ローカル"

elif [ "$MEDIA" = "1" ] ; then

 DEVICES="/dev/sdb"
 FOLDER="/hdd"
 COMENT_01="外部記憶装置"

elif [ "$MEDIA" = "2" ] ; then

 #ファイル出力先
 DEVICES=" -t cifs //192.168.5.40/ORCABackup"

 #マウントポイント
 FOLDER="/cifs"

 #マウントオプション
 #基本的に変更不要 (ファイル出力先をユーザ認証が必要なフォルダに指定する場合に変更)
 #例 : NAS上のアクセス制限が有効なフォルダ・パスワード保護共有が有効なWindows端末等

 OPTION=" -o username=ID,password=PASSWORD,gid=1000,uid=1000"

 #コメント
 COMENT_01="共有フォルダ"
fi


【メール送信テスト方法】
pg_dumpコマンドのエラー再現
ex. sudo -u orc pg_dump -Fc orca > /cifs/$NAME.dump 2> "${MAIL[DumpLog]}"

mountコマンドのエラー再現
ex. ["DEVICES"]="-t cifs //192.168.5.40/AAABBBCCC"


【動作確認】
Ubuntu20.04 確認済み
Ubuntu22.04 確認済み


【更新履歴】
廣海 2024/02/28 バックアック媒体にローカル選択時、cifsディレクトリの所有者が自動でorcaになるようコード追加(91-93行目)