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

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


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

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

今週は、突然、別のプロジェクトのお手伝いをすることになり、 東京にてお手伝い作業をしております。(もうお手伝いの域を越えていますが…)

土日は名古屋に戻れるかと思っていたのですが、 ものすごいあやうい状況になってきて、帰るわけにもいかず、 ホテルと会社の間を往復するだけの日々が続いています。

会社に属する限り、仕方がないと言えば仕方がないですし、 途中でほうり出すのも人間として間違っていると思いますので、 もうちょっとがんばりたいと思います。

それはともかく、ひさびさに東京へ来て思ったのは、こんなことでした。

  • 信号が赤になってから、反対側が青になるまでの時間が、やけに短い。
  • 深夜もひとがそれなりにいて、店もけっこうやっている。
  • am/pm がやたら多い。通りをはさんで向かい合わせにあったりする。
  • コンビニの店員さんは、半分くらいが外国人のような気がする。
  • 東大にいたひとは、みんな東大にいるひとっぽく見えた。
  • ひとが歩いていない秋葉原の街を、はじめて見た。

…田舎もんのひとりごとみたいですね。というかそのものです。

おつかれ気味ですが、負けずに、今週も、はりきってまいりましょう!

今週のお題 - メールサーバを監視する / デッドマンズ・チェスト

先週、メールサーバを監視する方法を、ご紹介しました。

Vol.070 - メールサーバを監視する
http://www.usupi.org/sysad/070.html

メールサーバに SMTP でアクセスして動作確認を行い、 おかしかった場合にメールで通知する、という方法をご紹介しました。

しかしよく考えたら、監視を行っているマシンのメールサーバと、 実際にその環境で使用しているメールサーバが同じだったら、 メールが届かなくなってしまいます。

では、別のメールサーバに、 直接メールの送信をお願いしてしまえばよいのではないでしょうか。

というわけで、先週の続きです。


別のメールサーバに直接お願いする、ということは、 SMTP で直接アクセスするということです。

あ、じゃあ、先週ご紹介した、smtpcheck.pl がそのまま使えそうです。

smtpcheck.pl は、メールサーバと、 宛先および送信元のメールアドレスを引数に指定すると、 そのメールサーバに対して、SMTP を使って、 test と書かれた味もそっけもないメールを送信します。

  % /usr/local/sbin/smtpcheck.pl smtp_server test usu@usupi.org \
  || echo NG

上記のように実行すると、smtp_server に対して、test 宛にメールを送信します。 失敗すると 0 以外の値を返すため、NG と出力されます。

それでは、以下のようにしてみると、どうでしょうか。

  % /usr/local/sbin/smtpcheck.pl bad_server test usu@usupi.org \
  || /usr/local/sbin/smtpcheck.pl good_server root usu@usupi.org

bad_server がおかしくなっていたら、good_server 経由で、 test という内容のそっけないメールが、root に送信されるようになります。


しかし、いくらなんでも、test では困りますよね。
smtpcheck.pl が送信するメールの、 サブジェクトと本文を指定できるようにしてみましょう。

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

  # (1)引数チェック
  if($#ARGV != 3) {
      print STDERR "Usage: $0 smtpserver to_addr from_addr subject\n";
      exit 1;
  }

  # (2)第1引数=サーバ, 第2引数=宛先, 第3引数=送信元, 第4引数=題名
  my $host = shift;
  my $addr = shift;
  my $from = shift;
  my $subj = shift;  # (5)サブジェクト

  # (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\nSubject: $subj\n\n")) {
      &err_exit($smtp, "DATA failed.", 6);
  }
  while(<>) { # (6)標準入力をそのまま本文に
      if(!$smtp->datasend($_)) {
          &err_exit($smtp, "DATA failed.", 6);
      }
  }
  if(!$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)〜(4) の大枠の流れは、基本的に同じです。
今回ちょっと違うのは、(5) のサブジェクトと、(6) の本文です。
引数を1つ増やし、それをサブジェクトに使用します。
そして、データを送信する際に、標準入力から読み込んだ文字列を、 そのまま本文として送信しています。

ですので、先ほどの実行を、以下のように変えれば、 ちゃんとした警告のメールが送られるようになります。

  % echo test | smtpcheck.pl bad_server test usu@usupi.org "" \
  || (echo "bad_server is bad" | \
      smtpcheck.pl good_server root usu@usupi.org Alert)

以上、メールサーバを監視する方法…の続きを、ご紹介しました。

トラブルには、さまざまなものがあると思います。
これでおっけー、ということはまずありませんので、問題にぶちあたったとき、 柔軟に対応できるよう、日頃からの鍛錬が重要だと思います。

…というのは、今の自分に言い聞かせたい言葉でした。

宿題の答え

先週の宿題は、

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

でした。

前回と同様、標準エラー出力を一旦ファイルに記録しておいて、異常終了時に、 記録しておいたファイルの内容を、メールで送信すればいいですね。
というわけで、今週のスクリプトを利用した、シェルスクリプトです。

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

  if [ $# -ne 5 ]; then
      echo "Usage: $0 check_serv check_to failsafe_serv alert_to from"
      exit 1
  fi

  CHECK_SERV=$1
  CHECK_TO=$2
  OK_SERV=$3
  SEND_TO=$4
  FROM=$5
  SUBJECT="[Alert] $CHECK_SERV"
 
  echo test | smtpcheck.pl $CHECK_SERV $CHECK_TO $FROM test > \
      $TMPFILE 2>&1
  if [ $? -ne 0 ]; then
      cat $TMPFILE | smtpcheck.pl $OK_SERV $SEND_TO $FROM "$SUBJECT"
  fi

基本的には前回の宿題と同様ですので、説明は割愛させていただきます。
smtpcheck.pl のパスは、本当は正確に書いたほうがいいなど、 いろいろと突っ込みどころがあると思います。 みなさんでお探しください。(投げ槍)

今週の宿題

今週の宿題は、

  インターネットでのメールの配送方法を調べましょう。

です。

ようは、DNS のなにを引いて、誰に送るか、というあたりのことです。
基本的なことですし、みなさんはご存知かもしれませんが、おさらいだと思って、 調べておいてくださいませ。

あとがき

というわけで、フル回転で作業をしてますが、 インストールスクリプトを作成して試している最中、 思わぬ罠に引っかかってしまいました。

なんと、サーバの /bin が、まるっとごっそり消えてしまったのです。
つまり、たとえば、ls を実行したら、 command not found とか言われてしまったわけです。 (全身の毛穴から、冷汗が放出されました。)

同じ OS の別のマシンに HDD をつなぎ、/bin をコピーすることで、 復旧はできたのですが、原因がわかりません。

とはいえ、また /bin が消えてはいけませんので、 また同じことになっても復旧できるよう、以下を実行しておきました。

  # cd /
  # tar cf some/where/bin-all.tar bin
  # cp -p bin/tar some/where/

つまり、もし /bin がなくなっても、以下のようにすれば、 最悪の自体を避けることができます。

  # cd /
  # ./some/where/tar xfp some/where/bin-all.tar

 

それはさておき、びくびくしながら作業をしているうちに、 原因を見つけることができました。
Makefile に、以下のような記述がありました。

  uninstall:
          @rm -rf $(PREFIX_BIN)/bin

一見、なんの問題もないように見えますが、 もし $(PREFIX_BIN) が定義されていないと… うあああ、ということでした。

みなさんも、rm を使うときには、十分注意しましょう。
いやー、日々勉強ですね。
経験値を稼げたなーと、前向きに考えることにしたいと思います。

 

という状況ですので、申し訳ありませんが、来週はお休みをいただきたいと思います。

 

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

 

「いますぐ実践! 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・チャルディーニ
  思わず納得します