いますぐ実践! Linuxシステム管理

[バックナンバーのトップへ] [Linux システム管理のトップへ]


いますぐ実践! Linux システム管理 / Vol.070 / 読者数:876名

こんばんは、うすだです。

今日は、四日市の花火をみてきました。
知合いが四日市に住んでいて、家から花火がよくみえるというのを聞き、 一家でそのおうちにお邪魔してきた次第です。

ひさびさにみて思ったのですが、花火って、不思議ですよね。
大雑把に言ってしまえば、丸い玉に火薬を詰めただけなのに、 実に様々な色や形になります。 花火大会は1時間半ほどでしたが、ずっとみていても、 ぜんぜん飽きることなく楽しむことができました。

それから、視覚だけでなく、 聴覚(爆発(?)する音)や嗅覚(火薬の匂い)も楽しめるということに、 今日は気づきました。
こういうのって、知識だけではなかなか気づかないことですよね。 出不精なわたしも、たまにはお出かけして、体験しないといかんと思いました。

そんなわけで、いろいろ楽しかったのですが、帰りは渋滞で大変でした。
結局、わが家には、日付が変わる直前に、ようやくたどり着きました。

ちょっとげんなりしてますが、今週も、はりきってまいりましょう!

今週のお題 - メールサーバを監視する

というわけで、安直なテーマを選んでしまいました。

…あ、いや、でも、ほら、メールが届かなくなると、 困るひとがいっぱいいるわけですよね。 休み中だったから気づかなかったとか、外出して直帰したから知らないとか、 システム管理者は、そんな苦しい言い訳をしても聞いてもらえないわけですよ。

異常を即座に関知し、早急に修正する。
これでこそ、システム管理者の鏡だ!! と声高に言えることでしょう。

というわけで、今週は、メールサーバを監視する方法を、ご紹介します。


安直に、以下のように、Mail コマンドで確認する方法も、 ありといえばありだと思います。

  % echo test | /usr/bin/Mail -s test usu@usupi.org

usu@usupi.org に、test というメールが届けば大丈夫、という方法です。

しかし、複数のメールサーバで分散していると、どれかがとち狂っていても、 とち狂っているメールサーバを回避してうまく届いてしまう、 ということが考えられます。
(実際、わたしが使ってるプロバイダは、 2つあるメールサーバのうち1つがとち狂っていることに、 しばらく気づいていませんでした。)

ですので、今回は、メールサーバに直接 SMTP で接続して、 メールを送信することで、メールサーバを監視したいと思います。

しかしながら、今度ばかりは都合のいいコマンドが見当たりません。
ですので、困ったときの Perl さま! に頼りたいと思います。

うまい具合に、Perl には Net::SMTP というモジュールが存在しましたので、 これを使って、実現してみようと思います。
Net::SMTP モジュールは、最近のディストリビューションであれば、 標準で入っているはずです。(ちなみに、RedHat 7.2 にもありました。)

 

というわけで、やや試行錯誤して作ったスクリプトが、以下です。
引数にメールサーバと宛先アドレス、送信元アドレスを指定して実行すると、 そのメールサーバに直接 SMTP で接続して、メールを送信します。
ちょっと長いですが、ご辛抱ください。

  #!/usr/bin/perl
  use Net::SMTP;
  use strict;

  # (1)引数チェック
  if($#ARGV != 2) {
      print STDERR "Usage: $0 smtpserver to_addr from_addr\n";
      exit 1;
  }
  # (2)第1引数=メールサーバ, 第2引数=宛先, 第3引数=送信元アドレス
  my $host = shift;
  my $addr = shift;
  my $from = shift;

  # (3)接続して、送信元と宛先とメールの内容を伝える
  my $smtp = Net::SMTP->new($host);
  if(!$smtp) {
      &err_exit($smtp, "cannot connect to $host.", 2);
  }
  if(!$smtp->mail($from)) {
      &err_exit($smtp, "$from: MAIL FROM failed.", 3);
  }
  if(!$smtp->to($addr)) {
      &err_exit($smtp, "$addr: RCPT TO failed.", 4);
  }
  if(!$smtp->data()) {
      &err_exit($smtp, "DATA failed.", 5);
  }
  if(!$smtp->datasend("From: $from\nTo: $addr\n\ntest") ||
     !$smtp->dataend()) {
      &err_exit($smtp, "DATA failed.", 6);
  }
  $smtp->quit;
  0;

  # (4)失敗したときの後処理
  sub err_exit {
      my ($smtp, $msg, $stat) = @_;
      print STDERR "$msg\n";
      $smtp->quit if $smtp;
      exit $stat;
  }

大雑把に内容を説明しますと…
(1) で、引数の個数をチェックして、(2) で、引数を変数に代入します。
(3) では、実際にメールサーバへ SMTP で接続し、 適当な内容のメールを送ります。
(3) のどこかで失敗した場合は、(4) で、 エラーメッセージを出力しつつ後処理を行って、終了します。

(3) の一連の処理は、SMTP をご存知のかたなら、 なんとなくああこれをやってるんだな、と推測できると思います。
ご存知ないかたは、以下にヒントがちょろっと載っていますので、 よろしければご参照ください。

Vol.020 - telnet でメールのチェックをする
http://www.usupi.org/sysad/020.html

 

さて、このスクリプトを、たとえば、 /usr/local/sbin/smtpcheck.pl という名前で保存して、実行権をつけたら、 以下のように実行します。

  % /usr/local/sbin/smtpcheck.pl smtp.usupi.org usu@usupi.org \
  usu@usupi.org

smtp.usupi.org が正常に動作していれば、 usu@usupi.org に test とだけ書かれた無愛想なメールが届きます。
(上記の smtp.usupi.org や usu@usupi.org を、 ご使用の環境に置き換えて実行してみてください。以降も同様です。)


これを、先週と同様に、失敗したらメールするようにしてみます。

  % /usr/local/sbin/smtpcheck.pl smtp.usupi.org usu@usupi.org \
  usu@usupi.org || \
  (echo mail server is wrong | /usr/bin/Mail -s 'Alert' root)

これを実行すると、smtp.usupi.org がとち狂っていて、 usu@usupi.org にメールが出せないとき、root 宛にメールが届きます。
smtp.usupi.org が正常なら、 確認のメール(test とだけ書かれた無愛想なメール)が usu@usupi.org に届きます。

あとは、これを cron で定期的に実行すれば、 メールサーバの監視を行うことができると思います。
しかし、たとえば、上記を10分に1回実行しますと、1日に144通、 確認のメールが usu@usupi.org に送られてしまいます。

…それはちょっとうっとおしいですよね。 確認のメールは読む必要がないと思いますので、捨ててしまいます。
受信したメールをすべて捨ててしまうアドレスを作成し、 そのアドレスに確認メールを送るようにすれば、実現できますね。

ここでは、そのアドレスを check という名前にしたいと思います。
/etc/aliases に、以下のエントリを追加しましょう。

  check: /dev/null

追加したら、newaliases コマンドを実行します。
これで、check 宛に来たメールは、/dev/null に捨てられます。

あとは、確認メールの送り先を check に変えれば、完成です。

  % /usr/local/sbin/smtpcheck.pl smtp.usupi.org check@usupi.org \
  usu@usupi.org || \
  (echo mail server is wrong | /usr/bin/Mail -s 'Alert' root)

以上、メールサーバを監視する方法について、ご紹介しました。

しかし、まだ問題が残っています。
監視しているメールサーバと、 Mail コマンド経由でメールを送信したときに経由するメールサーバが同じ場合、 メールサーバがとち狂ったときに、通知メールが届かなくなってしまいます。

さてどうしましょう…?
ということで、続きは次週にご紹介したいと思います。

宿題の答え

先週の宿題は、

  Anonymous FTP サーバを監視してください。

でした。

先週のお題と同様、wget コマンドでできます。
監視用のファイルが、ftp://ftpserver/pub/keepalive.txt だとすると、 以下のように実行するだけです。

  % wget -q -O /dev/null ftp://ftpserver/pub/keepalive.txt || \
  (echo ftpd is down. | /usr/bin/Mail -s '[ftpd] Alert' root)

…これだけだとあまりにもアレですので、 wget のエラーメッセージを送信するようにしてみましょう。
こんなシェルスクリプトを作ってみました。

  #!/bin/sh
  TMPFILE=/tmp/ftpcheck-$$
  trap "rm -f $TMPFILE" 0 1 2 3 9 11 15
  LANG=C
  export LANG

  if [ $# -ne 2 ]; then
      echo "Usage: $0 url address"
      exit 1
  fi

  URL=$1
  MAIL=$2
  /usr/bin/wget -O /dev/null $URL > $TMPFILE 2>&1
  if [ $? -ne 0 ]; then
      /usr/bin/Mail -s '[wget] Alert' $MAIL < $TMPFILE
  fi

最初は、使用する一時ファイル(TMPFILE)と、 シグナルを受信したときに一時ファイルを消すための呪文(trap)、 環境変数 LANG の設定です。
次に、引数から、URL とメールアドレス(MAIL)を得ます。 なければ文句を言って強制終了します。

あとは、出力を一時ファイルにリダイレクトしつつ wget コマンドを実行して、 wget の終了ステータス($?)が 0 でなければ、一時ファイルの内容をメールします。

このシェルスクリプトを、 たとえば /usr/local/sbin/wgetchk.sh という名前で保存し、実行権をつけたら、

  % /usr/local/sbin/wgetchk.sh http://www.usupi.org/sysad/ root

とか、

  % /usr/local/sbin/wgetchk.sh ftp://ftpserver/keepalive.txt root

という具合に実行してください。
wget が正常終了しなければ、その実行結果が root にメールされます。

今週の宿題

今週の宿題は、

  今週のスクリプトを使ってメールサーバを監視しますが、メールサーバ
  がおかしいとき、エラーメッセージをメールで通知してください。

です。

今週のお題では、メールサーバがおかしいときにメールで通知しますが、 メッセージはいつも同じなので、なにがおかしいかがわかりません。
スクリプトのエラーメッセージをメールで通知すれば、 なにがおかしいかが推測できますよね。
前述の宿題の答えを参考にして、作ってみてください。

あとがき

先週くらいまで、「ハッカーと画家」を読んでいたのですが、その中に、 ベンチャー企業は、2つの選択肢があったら、技術的に難しいほうを選べばいい、 というような記述がありました。

技術的に難しければ難しいほど、同じ土俵にいる企業がいない (特に大企業は難しいほうを選べない)ため、有利になる、ということだそうです。

そして、人生においても、同じことが言えるとあります。
簡単なほうは、自分の怠惰さが持ち出してきたに違いなく、心の底では、 自分が何をすべきかわかっているはずだからだそうです。

言われてみればその通り、と言えそうですが、恥ずかしながらわたしは、 この本を読むまで気がつきませんでした。
実際に、難しいほうを選択できるかどうか自信はありませんが、 もしそういう状況になったら、一瞬でも考えてみようと思いました。

そして興味深いことに、岡本太郎も、同じようなことを言っていました。
「自分の中に毒を持て」の中で、安全な道と危険な道があったら、 危険な道を選ぶべきだ、と主張しています。
安全で間違いのない道を選ぶよりも、死に対面することこそ生なのでは、 というような厳しいことを、いつもの熱い文体で書かれています。

テンションとかニュアンスが違いますが、結果的に、 アメリカの技術屋と日本の芸術家が、同じことを主張しているのが、 面白いと思いました。

あ、いずれも、わたしのいい加減な要約ですので、詳しくは、 以下の本を読んでください。どちらも面白いので、読んで損はしないと思います。

ハッカーと画家
http://www.amazon.co.jp/exec/obidos/ASIN/4274065979/usupiorg-22

自分の中に毒を持て
http://www.amazon.co.jp/exec/obidos/ASIN/4413090101/usupiorg-22

 

今週も、ここまで読んでいただき、ありがとうございました。
それでは、また『来週』に、お会いしましょう!

 

「いますぐ実践! Linux システム管理」の解除は、以下からできます。
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

バックナンバーは、こちらにほぼ全部そろっています。
http://www.usupi.org/sysad/backno.html

「栗日記」−この時期アクセスが少ない…だからみてください。
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)
http://usupi.seesaa.net/ (栗日記ブログ)
http://www.fumido.co.jp/kuriniki/ (栗日記ぎゃらりー)


[バックナンバーのトップへ] [Linux システム管理のトップへ]

トップ

バックナンバー
    [日付順] [目的別]

プロフィール

▼ リンク

独学Linux
Linuxデスクトップ環境に関する情報が満載です。 メルマガもありますよ。
Server World
CentOS 5 をサーバとしたときの設定例が、これでもかというくらいたくさん載っています。 CentOS以外のディストリビューションや、Solaris10の例も充実しています。
LINUXで自宅サーバーを構築・導入(Fedora8)
Fedora8のインストールの仕方から管理方法まで、詳しく載っています。 SearchManには情報がもりだくさんです。
マロンくん.NET
〜サーバ管理者への道〜
Linuxをサーバとして使用するための、いろいろな設定方法が載っています。 マロンくんもかわいいです。 なんといっても、マロンくんという名前がいいですね!!
日本の Linux 情報
日本の、Linux 総本山的なところです。
Linux Square − @IT
@ITが提供する、Linux の情報が満載。 載っていない設定方法はないんじゃないでしょうか。
Open Tech Press
Linux に限らず、オープンソース関連の記事が網羅されています。
ITmediaエンタープライズ:Linux Tips 一覧
Tips というより FAQ 集でしょうか。わからないことがあれば覗きましょう。
IBM developerWorks : Linux
開発者向けですが、勉強になりますよ。
Yahoo!ニュース - Linux
Yahoo!のLinuxに関するニュース一覧です。
栗日記
システム管理とかと全然関係ありませんが、毎日栗の絵を描いています。
システム管理につかれちゃったとき、癒されたいときに、ご覧ください。:-)
WEB RANKING - PC関連
ランキングに参加してみました。押してやってください。

▼ 作ってみました

Add to Google

▼ せんでん





▼ 最近読んだ本

ハリー・ポッターと不死鳥の騎士団 ハリー・ポッターと不死鳥の騎士団
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと炎のゴブレット ハリー・ポッターと炎のゴブレット
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターとアズカバンの囚人 ハリー・ポッターとアズカバンの囚人
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと秘密の部屋 ハリー・ポッターと秘密の部屋
J.K.Rowling
  ハリポ月刊なので読み直してます
ハリー・ポッターと賢者の石 ハリー・ポッターと賢者の石
J.K.Rowling
  ハリポ月刊なので読み直してます
アルケミスト アルケミスト
パウロ・コエーリョ
  また読んだ
賢者の書 賢者の書
喜多川 泰
  違った視点から見られてよかった
セキュリティウォリア セキュリティウォリア
Cyrus Peikari, Anton Chuvakin
  やや冗長…ためにはなりました
CORE MEMORY CORE MEMORY
John Alderman, Mark Richards
  この筐体でPC作ってほしい!
新訳 星の王子さま 新訳 星の王子さま
サン=テグジュベリ
倉橋 由美子
  つまらない大人になったのか…
.....

[X]
「センネン画報」 今日 マチ子
「粟津潔 デザインする言葉」 粟津潔
「Binary Hacks」 高林 哲,鵜飼 文敏,佐藤 祐介,浜地 慎一郎,首藤 一幸
「Make: Volume01」 オライリー・ジャパン
「セーラが町にやってきた」 清野 由実
「手紙屋」 喜多川 泰
「Linuxカーネル2.6解読室」 高橋 浩和,小田 逸郎,山幡 為佐久
「人蕩し術」 無能 唱元
「子育てハッピーアドバイス2」 明橋 大二, 太田 知子
「ラッセル幸福論」 B. Russell
「それでも人生にイエスと言う」 Viktor Emil Frankl
「子育てハッピーアドバイス」 明橋 大二, 太田 知子
「考具」 加藤 昌治
「北欧デザイン<3>」 渡部 千春
「北斎の謎を解く」 諏訪 春雄
「体感美術館」 平野 暁臣
「チベット永遠の書」 Theodore Illion
「リナックスの革命」 Pekka Himanen
「人月の神話」 Frederick Phillips,Jr. Brooks
「ヤバい経済学」 Steven D. Levitt, Stephen J. Dubner
「小布施ッション<2001-2002>」 セーラ・マリ カミングス
「アンパンマン伝説」 やなせ たかし
「夢をかなえるゾウ」 水野 敬也
「ゲーム開発者のためのAI入門」 David M. Bourg, Glenn Seemann
「北欧デザイン<2>」 渡部 千春
「北欧デザイン<1>」 渡部 千春
「ヒューマン2.0」 渡辺 千賀
「中国・ロシア同盟がアメリカを滅ぼす日」 北野 幸伯
「超ロング・セラー 絶滅寸前商品」 湯浅 豊彦
「The BUG(ザ・バグ)」 すずき ひろのぶ,かとう みつあき
「デザインのデザイン」 原 研哉
「マキアヴェッリ語録」 塩野 七生
「ハンバーガーを待つ3分間の値段」 斎藤 由多加
「星の旅人-スペイン「奥の細道」-」 黛 まどか
「食品の裏側」 安部 司
「On Lisp」 Paul Graham
「ぼくが医者をやめた理由 つづき」 永井 明
「あなたならどうする?」 Jack Nikolaschka
「セキュアプログラミング−失敗から学ぶ設計・実装・運用・管理」
      Mark G. Graff, Kenneth R. van Wyk
「「左利き」は天才?−利き手をめぐる脳と進化の謎
      David Wolman
「自分の中に毒を持て」 岡本 太郎
「アトピーの薬を減らす本」 田中 貴子
「岡本太郎「明日の神話」修復960日間の記録」 吉村 絵美留
「X51.ORG THE ODYSSEY」 佐藤 健寿
「アレルギーっ子の暮らし応援BOOK」 佐藤 のり子
「沖縄文化論」 岡本 太郎
「「伝説の社員」になれ!」 土井 英司
「コンピュータの構成と設計(上)」 Patterson & Hennessy
「カラスのジョンソン」 明川 哲也
「ドリルを売るには穴を売れ」 佐藤 義典
「頭がよくなる照明術」 結城 未来
「クロフォードのインタラクティブデザイン論」 Chris Crawford
「いじめの根を絶ち子どもを守るガイド」 Barbara Coloroso
「非常識のすすめ―逆発想の仏教論」 ひろさちや
「Linuxアドバンストネットワーク構築ガイド - HAサーバ構築編」
      デージーネット
「イノベーションの達人!」 Tom Kelly, Jonathan Littman
「クリエーター50人が語る創造の原点」 小原 啓渡
「欺術 - 史上最強のハッカーが明かす禁断の技法」 Kevin Mitnick
「楽しい気象観察図鑑」 武田 康男
「入門 Ajax」 高橋 登史朗
「リリカルな自画像」 岡本 太郎
「やぎの目ゴールデンベスト」 林 雄司
「初めてのPython 第2版」 Mark Lutz,David Ascher
「鼻兎」 小林 賢太郎
「なぜ、これがアートなの?」 Amelia Arenas
「芸術起業論」 村上 隆
「まほう色の瞳」 Enrique Barrios
「ラーメンズつくるひとデコ」 ラーメンズ
「R25 つきぬけた男たち」 R25編集部
「美の呪力」 岡本 太郎
「しろのあお」 上大岡 トメ
「ザ・ゴール」 Eliyahu M. Goldratt
「ハッカーと画家」 Paul Graham
「岡本太郎に乾杯」 岡本 敏子
「Fedore Core Expert」 Software Design
「誰も知らない男」 ブルース・バートン
「子どもが育つ魔法の言葉」 ドロシー・ロー・ノルト
「国家の罠」 佐藤 優
「夜回り先生」 水谷 修
「やぎの目絵日記」 林 雄司
「7つの習慣」 スティーブン・R. コヴィー
「まろ、ん?−大掴源氏物語」 小泉 吉宏
「ザ・サーチ グーグルが世界を変えた」 ジョン・バッテル
「ポストモダン・マーケティング」 スティーブン ブラウン
「機動戦士ガンダムさん」 大和田 秀樹
「小エロのひみつ - Webやぎの目研究発表」 林 雄司
「これ、誰がデザインしたの?」 渡部千春
「60分間・企業ダントツ化プロジェクト」 神田 昌典
「ガルシアへの手紙」 エルバート ハバード
「人生は素晴らしいものだ」 オグ・マンディーノ
「ザ・マインドマップ」 トニー・ブザン,バリー・ブザン
「ワインバーグのシステム思考法」 G.M.ワインバーグ
「渋谷ではたらく社長の告白」 藤田 晋
「渋井真帆の日経新聞読みこなし隊」 渋井 真帆
「コラム息切れ」 小野 法師丸
「早朝起業」 松山 真之介
「変な人が書いた驚くほどツイてる話」 斎藤 一人
「35歳から仕事で大切にしたいこと」 村井 勉
「金融広告を読め」 吉本 佳生
「発想する会社!」 トム・ケリー,ジョナサン・リットマン
「エハイク」 吉田 戦車
「人生の旋律」 神田 昌典
「仕事の思想」 田坂 広志
「CPUの創りかた」 渡波 郁
「非常識な成功法則」 神田 昌典
…これ以前は記録してません…

▼ 気に入ってる本

夢をかなえるゾウ 夢をかなえるゾウ
水野 敬也
  いままでで最高の「笑える」成功本
Linuxデバイスドライバ Linuxデバイスドライバ
Alessandro Rubini,
Jonathan Corbet
  ドライバ作らなくてもためになる
Firefoxの改造テクニック! Firefoxの改造テクニック!
大浦 淳
  いま栗日記拡張を考えてます
Apacheモジュール プログラミングガイド Apacheモジュール プログラミングガイド
小山 浩之
  Apacheの中身もわかるよ
図解 実戦マーケティング戦略 図解 実戦マーケティング戦略
佐藤 義典
  栗日記も戦略的に行こう!
やぎの目ゴールデンベスト やぎの目ゴールデンベスト
林 雄司
  よめも爆笑してました
アルケミスト アルケミスト
パウロ・コエーリョ
  ヘコみそうなとき読みます
X51.ORG THE ODYSSEY X51.ORG THE ODYSSEY
佐藤 健寿
  X51.ORGの集大成
チベット永遠の書 チベット永遠の書
Theodore Illion
  いろんな意味ですごい!!
影響力の武器 影響力の武器
ロバート・B・チャルディーニ
  思わず納得します