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

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


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

こんばんは,うすだです.

D.A.ノーマンの,エモーショナル・デザインという本を読んでいます.
そこに書かれていた,以下のような記述に,ぐっと来ました.

ネガティブな感情状態にある時は,トラブルの細部に集中してしまい,解決できないとさらに緊張と不安が増してしまいますが,
ポジティブな感情状態にある時は,トラブルに巻き込まれても,いろいろなアプローチを探す余裕があるため,問題解決に至ることが多いそうです.

これを言いかえると,幸せな人は,別の解決策を見つけるのがうまく, その結果,ささいな困難に耐えることができる,ということになります.

ここのところ,ネガティブな方に感情が引っ張られていたのですが, これを読んでから,ちょっと楽になれました.
ある程度の緊張や不安も必要ですが,根拠なくなんとかなるさ,という 気楽さも必要なんだな,と思いました.

…前置きが長くなりました.
それでは,今日も,はりきってまいりましょう!

今週のお題 - 携帯にメールを転送する

トラブルなどの緊急時は,出張中であろうが夜中であろうが,すぐに連絡が来てほしいものです.
会社の携帯を持っているとか,上司やお客様に携帯番号を知らせてある場合は,(よいかどうかはともかく)すぐに連絡してもらえます.
でも,そうじゃないと,次の日の出社時まで連絡を受けられなくて,対応が遅れてえらいことに…という困ったことになるやもしれません.

というわけで,今回は,ある条件がそろったときに,メールを携帯に転送する, ということをしてみたいと思います.

問題が発生した時,すぐに自分宛にメールが来るようになっていると, そのメールを携帯に転送すれば,緊急時にすぐ対応できるようになります.
システム管理者の鏡! とか言われるようになりますね.希望的観測ですが.

メールの転送を行うには,ホームにある .forward を使います.

例えば,~usu/.forward を以下の内容にしておくと,メールが,自分(usu) 宛の他に, usu@usupi.org にも転送されるようになります.

  \usu,usu@usupi.org

, で区切って,複数のアドレスを指定することができます.

usu の前に \ がついていますが,これは,.forward による転送処理を, これ以上行わないという印です.
これを忘れると,.forward の解釈を無限に行ってしまい,メールがループかつ増殖して,ものすごくいやなことになります.
システム管理者の鏡! と言われる機会が永遠に損なわれる可能性がありますので,すごく注意してください.

また,| を使うと,コマンドの標準入力に,メールを入力することができます.
例えば,以下のようにすると,自分宛に送る他に,/home/usu/mail-all というファイルに,来るメール来るメール全部を放り込むことができます.
# そんなことしても,これっぽっちもうれしくありませんが….

  \usu,|/bin/cat >> /home/usu/mail-all

では,本題です.
| を使って,ある条件が揃った時に,携帯にメールするスクリプトを書いてやれば,目的にたどりつけそうです.

さて,携帯にメールする条件ですが,今回は,

  Subject: の先頭に KEITAI という文字が入っていた場合に,転送する

ということにします.
では,答のスクリプトです.

  #!/usr/bin/perl
  my $FORWARD_TO = "usu\@usupi.org";
  my $SENDMAIL_CMD = "/usr/sbin/sendmail -oi $FORWARD_TO";

  sub send_mail {
        my ($cmd, $message) = @_;
        if(open(MAIL, "|$cmd")) {
                print MAIL $message;
                close MAIL;
        } else {
                print STDERR "cannot open \"$SENDMAIL\".\n";
        }
        1;
  }

  ### main

  my $forward = 0;
  my $message = "";

  # parse header
  while (<>) {
        chop;
        last if /^\s*$/;
        $forward = 1 if /^Subject:\s*KEITAI/;
        $message .= "$_\n";
  }
  exit 0 unless $forward;

  # get content
  while (<>) {
        $message .= $_;
  }

  &send_mail($SENDMAIL_CMD, $message);
  0;

打ち込むのが面倒な方は,以下のページを保存してご使用ください.
http://www.usupi.org/sysad/007_pl.txt

使用方法は,まず,最初の $FORWARD_TO に,携帯のメールアドレスを指定してください. …あ,別に携帯のアドレスじゃなくても構いません.
あとは,上記スクリプトが /home/usu/bin/keitaifwd.pl というパスで存在するなら, $HOME/.forward に,

  |/home/usu/bin/keitaifwd.pl

を追加します.
もちろん,自分(usu)宛に送る必要があるなら,

  \usu,|/home/usu/bin/keitaifwd.pl

とします.

これで,Subject: の最初が KEITAI で始まるメールが,携帯宛に転送されるようになります. 緊急のメールや,セキュリティ絡みのメールの Subject: の先頭には, KEITAI と入れるようにしておくといいですね.

ただ,いきなり自分のアカウントで試すのはリスキーかもしれません.
できれば,適当なアカウントを作って,そのアカウントで試した方が, えらい間違いを犯してしまった時に,自分への被害が少なくてすみます.

なにはともあれ,一度お試しください.
来週は,もうちょっとひねってみたいと思います.

宿題の答え

先週の問題は,

  /proc/meminfo の内容を返すサーバを,作ってください.

でした.

答ですが,まず,使用するポートを,/etc/services に追加します.
例えば,TCP の 12345番を使用する場合,以下の1行を追加します.
# すでに services にあり,使用されていないものを使ってもいいです.

  meminfo    12345/tcp

次に,/etc/xinetd.d/meminfo を作成します.内容は以下の通りです.
# 先週の usoweb とほとんど同じですね.

  # default: off
  # description: Show /proc/meminfo.
  service meminfo
  {
        disable = yes
        flags           = REUSE
        socket_type     = stream        
        protocol        = tcp
        wait            = no
        user            = root
        server          = /usr/local/sbin/meminfod
  }

作成したら,chkconfig meminfo on で有効にします.
xinetd じゃなくて inetd の場合は,以下を /etc/inetd.conf に追加し, inetd に SIGHUP シグナルを送ります.

  meminfo stream tcp nowait root  /usr/local/sbin/meminfod meminfod

そして,/usr/local/sbin/meminfod の中身は,以下の通りです.

  #!/bin/sh
  cat /proc/meminfo

簡単ですね.動作確認には,telnet コマンドを使用します.

  % telnet localhost meminfo

みなさんは,もうちょっと役に立ちそうなものを考えて,試してみてください.
(そして,いいものを思いついたら,教えてください.(^ε^;)

今週の宿題

今週の宿題は,こちらです.

  X-Keitai-Forward: というヘッダのあるメールを,携帯に転送する
  スクリプトを作ってください.

本題でご紹介したスクリプトを,ちょっと変えるだけです.
# Perl がわからない方は,来週の答え合わせまで,お待ちください.

あとがき

冒頭でご紹介した,エモーショナル・デザインは,機能や効率を追求したデザインもいいけど, 情動についても考慮すべきなんじゃないか,という視点でデザインを考える, という内容の本です.
# …と思っていますが,間違っていたら,すみません.

冒頭では,本題と関係ないところでぐっときた話をしましたが,本題の方も面白いです. まだ途中までしか読んでませんが….
情動を考慮したソフトウェアなんてーものを,作ってみたいですね.

さて,だんだんとネタがなくなってきましたので,図書館で, いくつか本を借りてきました.
図書館は,最新の本はあまりないですが,お金がいらないし, 意外な本があったりしますし,本の保管場所で悩む必要がないのが,いいですね.
実際に使ってみて,これはまあ便利だなと思えるものをご紹介したいと思いますので, 暇を見つけて,いろいろ試してみようと思います.

とはいえ,ネタはいくつあっても困りませんので,いつでも募集中です.
こんなのに困ってますとか,こんなことできないの? とか,なんでも結構ですので, ご連絡ください.
# 栗バッジとか目当てでも,かまいません.:-)

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

このメルマガの登録および解除は,以下からどうぞ.
http://www.usupi.org/sysad/ (まぐまぐ ID:149633)

栗の絵のメルマガ,本業そっちのけで毎日発行しています.
http://www.usupi.org/kuri/ (まぐまぐ ID:126454)


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

トップ

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

プロフィール

▼ リンク

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

▼ 作ってみました

Add to Google

▼ せんでん




▼ 最近読んだ本

▼ 気に入ってる本