T.Ozakiの日記: CentOS6のmailコマンドでハマる 4
今までメインで使っていたVPS鯖(CentOS 5)に、システムが起動したらスマホにメールを飛ばす仕組み(まあぶっちゃげると/etc/rc.d/rc.localに起動通知メールを発信するスクリプトを実行するコマンドを書いただけ)を仕込んでいたので、それを新しく契約したVPS(CentOS 6)にも仕込む事に。
…が、同じコードを実行するとメールは来るもののヘンなToが入る上、本文がないという謎な状況に。
コードはこんな感じ。
#!/bin/bash -e
SRCADDR="webmaster@所有ドメイン"
DSTADDR="宛先となるスマホのアドレス"cat << EOD | /usr/bin/nkf -j | /bin/mail -s "`/bin/hostname` Start-up!" $DSTADDR -- -f $SRCADDR
(ここに起動通知メールの本文が入る。)
EOD
…で、いろいろ探してみたところ sendmail コマンドによるメール発信(ダメ出しblog) に良い感じで解決できそうなコードが紹介されていたので、それを参考にコードをこんな感じに書き換えてみた。
#!/bin/bash -e
export LC_CTYPE=ja_JP.UTF-8
SRCADDR="webmaster@所有ドメイン"
DSTADDR="宛先となるスマホのアドレス"cat << EOD | /usr/bin/nkf --ic=UTF-8 --oc=ISO-2022-JP | /usr/sbin/sendmail -i -f ${SRCADDR} ${DSTADDR}
From: ${SRCADDR}
To: ${DSTADDR}
Subject: `/bin/hostname` Start-up!
Content-Type: text/plain; charset=ISO-2022-JP
MIME-Version: 1.0(ここに起動通知メールの本文が入る。)
EOD
コレを実行したところ、きちんと本文がはいるようになった。
…いや、寧ろ今までFromが"root"になってたのがSRCADDRに設定したものになったから予定以上か。
しかしホント移行は面倒だなぁ…。
前世紀はそんなこともやったのお… (スコア:1)
やはりいまでもそうやってsendmailコマンドラインを直に叩く仕事ってあるものだったのかという懐古主義にひたることができてひととき楽しかった。
常時rootでぶん回してるのかな (スコア:0)
そこは/usr/sbin/sendmailではなく/usr/lib/sendmailじゃないのかと小一時間問い詰めたい。
また、どうせヘッダから何から書き出すのなら、sendmailの後ろも-i -tだけでいいだろ。無駄にゴチャゴチャつけんな。醜い。
nkfの必要性も微妙。スクリプト自体をJISで保存しときゃ済む話な上に、たかが起動通知メール如きの一体どこに日本語を使う必要があるんだか全くもって理解不能。
ぶっちゃけUS-ASCIIで十分だろ。
更につっこむと、そりゃCentOSの/bin/mailが腐ってるだけだろと。
mailxじゃなくてnailの方をビルドして、/bin/mailとして使っとけ。
そもそも/bin/mailの使い方も酷すぎ。あげく、catとか(笑)
そういう場合は、書き出すメール本文を別ファイルにしとくのが常識だけど、どうしてもスクリプト内に書きたい場合でも環境変数に入れるだろ普通。
で、スクリプトの一番最後で
これ/bin/mailの定型文。
# #!/bin/bash君の無駄にcatしたがる率の高さは異常。
# 酷い時にはgrepすら、catしてgrepしてやがる(笑)
Re:常時rootでぶん回してるのかな (スコア:1)
># 酷い時にはgrepすら、catしてgrepしてやがる(笑)
“cat FILE | grep”限定でなくいろいろなバリアントでということであれば
就業場所で先任協業者が「ともかくそうやれ」
と異論を認めない場合もあるのでしょうがないケースも。
// 実施時に再監必須の手順書に従った操作のあれやこれやをはじめ…
// 前段階のレビュー終了まででいろいろとほほな場合。無論これに限定されない。
誤字訂正 (スコア:1)
s/再監/再鑑 [srad.jp]/
// 引用元の※主は方言としているが必ずしも業種・SIerで単独に限定されない。
// オペミス御操作時の計上被害費用金額が大きいという共通項目はあってもそれだけが基準でもなさそう。