Be Silent! 〜 ミニサーバ日記 〜 29. 標準出力を我輩宛にお手軽にメールするスクリプト


 そんなこんなで、いろいろ一発でポン!なスクリプトやら定期タスクやらが増えてくると。 何かと我輩宛にメールが飛んでくる。特に定期タスクを司るcronから、毎日メールが飛んでくる。

 それらがみんな、差出人が「Cron Daemon」で、件名が「Cron <root@・・・」で、 しかも今は、ミニサーバとミニミニサーバとの両方からそれが毎日何通も飛んでくるので ややこしゅうてしょうがない。(^_^;

 そこで例によってスクリプトを作ることにした(笑)。 まぁ、メールソフトの振り分け設定をバキバキに設定して解決してもよかったのだがそれはそれ。 cronから起動されたジョブは、普通だと上記のような、なんだかみんな似たようなタイトルなので、 差出人と題名をオプションで自由に指定できるようにして、宛先はroot固定。メールの内容は 標準入力をそのまま使うということで、こんな感じになった。

#!/bin/sh
#
# 2003/11/24 opa

MYNAME=mail2admin
SENDMAIL=/usr/sbin/sendmail
TMPFILE1=`mktemp /tmp/$MYNAME.XXXXXX` || exit 100
TMPFILE2=`mktemp /tmp/$MYNAME.XXXXXX` || exit 100

deltmp()
{
	[ -f $TMPFILE1 ] && rm --force $TMPFILE1
	[ -f $TMPFILE2 ] && rm --force $TMPFILE2
}
trap deltmp EXIT

TO="root"
FROM="mail2admin"
SUBJECT="mail2admin"

if [ "$1" ]; then
	SUBJECT="$1"
fi

if [ "$2" ]; then
	FROM="$2"
fi

if [ ! -x $SENDMAIL ]; then
	echo "$MYNAME: missing $SENDMAIL"
	cat -
	exit 1;
fi

cat - > $TMPFILE2
if ! grep --quiet "[^ 	]" $TMPFILE2 ; then	# space or tab only
	exit 0
fi

echo "From:$FROM <$FROM>"		 > $TMPFILE1
echo "To:$TO"				>> $TMPFILE1
echo "Subject:$SUBJECT"			>> $TMPFILE1
echo "X-Mail2admin-Host:$HOSTNAME"	>> $TMPFILE1
echo ""					>> $TMPFILE1
cat $TMPFILE2				>> $TMPFILE1

# cat $TMPFILE1

nkf -b -E --jis $TMPFILE1 | \
	$SENDMAIL -i $TO

 第一引数に題名を、第二引数に差出人名を与える。 省略するとそれぞれ"mail2admin"が使われる。 ミソは、メールヘッダに、"X-Mail2admin-Host:"という勝手に作った ヘッダが含まれていること。受信側で、このヘッダで振り分けることで、 このスクリプトで発信されたメールかどうかを確実に判断することができる。 どのホストからのメールなのかも、一発でわかる。 また、入力が何もなかったときは、メール自体出さないようにしているので、 無駄な空メールが届くこともない。

 このスクリプトを作ったことで、cronを介さなくても、手軽に何でも我輩宛てに メールの形で残すことができるようになった。例えば、ls | mail2admin などとすると数秒後に lsの結果がメールで届くのだ。ホームディレクトリが一時ファイルで汚れることがないし、 後から参照するのも楽なので、非常に重宝している。ただ、切り貼りには向かないが。


トップ もどる