bashでコマンド終了後に通知メールを送信する
出先で時間のかかる処理をさせていると、いつ処理が終わったのかわからず何度も確認しなければならないのであまり便利ではない。外部からアクセスできる状態なら ssh とかでなんとかなるけれど、ローカルで置いてあるマシンだとそうも行かない。
今回の対象はローカル設置だけどネットに繋がっている状態なので一方的に通知メールを送るようにした。
基本的には sendmail (または mail)コマンドを使ってメールを送るだけ。
単純なものなら1行のコマンドで送信できるが、拡張性も考えて一旦メールヘッダを作成してから送る方式にした。
上のファイルを mailsender.sh として適当にパスの通ったところに置いて、 別のファイルから実行する時はこんな感じの1行を追加する。chmod で実行可能にしておく必要があるかもしれない。
"$0 $*" で mailsender.sh が呼び出された元のコマンドを message に送っている。 適当に工夫すればファイルを添付したりもできるはず。
送信元のアドレスに適当に自分のアドレスを入れて試したところ、実際の送信元は oooo.localdomain になって届いた。gmail では送信元を偽装しているスパム扱いされたので、その時の oooo.localdomain を送信元に設定しておいた。いろいろとセキュリティ的にどうなのか不完全なところはあるけれど当面の間は事足りそうなので不便が解消。
時間のかかるコマンド終了時に sendmail コマンドを使って通知メールを送信する。
今回の対象はローカル設置だけどネットに繋がっている状態なので一方的に通知メールを送るようにした。
基本的には sendmail (または mail)コマンドを使ってメールを送るだけ。
単純なものなら1行のコマンドで送信できるが、拡張性も考えて一旦メールヘッダを作成してから送る方式にした。
#1つ目の引数を message に格納する
message=""
if [ -n "$1" ]; then
message=$1
fi
wd=$(pwd)
#メールヘッダを作成して mailheader.txt に格納する
cat << EOF > "$wd"/mailheader.txt
From: hogehoge <hoge@hoge.com>
To: fugafuga <fuga@fuga.com>
Subject: mail no title
ここに本文を書く
$message
EOF
#sendmail にオプション -i -t をつけて実行
cat "$wd"/mailheader.txt | sendmail -i -t
#mailheader.txt を削除する
rm ./mailheader.txt
上のファイルを mailsender.sh として適当にパスの通ったところに置いて、 別のファイルから実行する時はこんな感じの1行を追加する。chmod で実行可能にしておく必要があるかもしれない。
mailsender.sh "$0 $*"
"$0 $*" で mailsender.sh が呼び出された元のコマンドを message に送っている。 適当に工夫すればファイルを添付したりもできるはず。
送信元のアドレスに適当に自分のアドレスを入れて試したところ、実際の送信元は oooo.localdomain になって届いた。gmail では送信元を偽装しているスパム扱いされたので、その時の oooo.localdomain を送信元に設定しておいた。いろいろとセキュリティ的にどうなのか不完全なところはあるけれど当面の間は事足りそうなので不便が解消。
時間のかかるコマンド終了時に sendmail コマンドを使って通知メールを送信する。
これいいですね。参考にさせていただきます。
返信削除