Edited at

Tips:bashスクリプトでコマンドが失敗したら、エラーメールを飛ばす

More than 1 year has passed since last update.


hoge.sh

#!/bin/bash

NOTIFY_MAIL_TOS='who@dummy.co.jp'

function sendErrorMail() {
local body="Error occurred."
local subject="Error mail !!!"
mail -s "${subject}" "${NOTIFY_MAIL_TOS}"
}

set -eu
trap "echo 'Error occurred.'; sendErrorMail; exit 1" ERR

## メインの処理


コマンドたち(「メインの処理」以降)で終了コード<>0が発生したときに、trapコマンドが発動してメールが送れます。

trapコマンドも'set -eu'も意外に使われていないことが多いですが、

プログラム(といってもbashスクリプトですが)を書く上でエラーハンドリングは、欠かせないので重宝しています。

'set -e'にしていても、trapコマンドが発動してくれるので、いい感じです。

大量に$?で終了コード判定をしなくても済むので、可読性も高くなります。

蛇足です。

・ おそらくたいていのbashバージョンで利用できると思います。

・ "trap ~~~ ERR"の"ERR"の部分については、シグナルについて確認してください。

・ シグナルの部分を変えると「ユーザーキャンセル時(Ctrl + C)は〇〇〇する」という制御できるようになります。

コメントなどありましたら、いただけると嬉しいです!!