uttsu.com > uttsuの日記 >

2003年2月2日

2005年 8月
2004年 5月
2003年 11月, 10月, 8月, 5月, 4月, 3月, 2月, 1月
2002年 12月, 11月, 10月, 9月, 8月, 5月, 3月, 2月, 1月
2001年 6月, 5月, 4月, 3月

2003年2月2日

# サーバー設定ミス

プライベートで運営しているサーバーが外部から接続できない状態になっていて、メールで教えてもらって気がついた。設定ミスが原因で、自宅からだと直接サーバーに繋がるので気がつかなかった。利用者のみなさまには大変ご迷惑をお掛けしましたm(_ _)m

きちんと確認していれば防げたことなので、未熟さを実感。まさかこんな単純なミスをするとは・・。再発防止のために定期的に外部のサーバーから監視するスクリプトでも書こう。毎回の確認もきちんと。

# サーバー監視スクリプト

httpサーバーが動いているか監視して、ダウンしている場合はメールで知らせてくれるスクリプトを書いた。運営中のサーバーも、安定性は並のレンタルサーバーくらいを目指したいな。

#!/usr/local/bin/perl

# Usage: is_alive_http.pl server

use strict;

my $host = $ARGV[0] or die;
my $mail = '○○';              # メールアドレス
my $proxy_host = '○○';        # proxyサーバー
my $proxy_port = 80;            # proxyのポート

main();

# ◆
sub main {
    if (!is_alive_http("http://$host/")) {
        print "$host is down\n";
        system("echo '$host is down' | mail $mail");
    }
}

# ◆
sub is_alive_http {
    my $target = shift;
    my @result;

    my $addr = (gethostbyname($proxy_host))[4];
    my $name = pack("S n a4 x8", 2, $proxy_port, $addr);
    socket(SOCKET, 2, 1, 0);
    connect(SOCKET, $name);
    binmode(SOCKET);
    select(SOCKET); $| = 1; select(STDOUT);
    print SOCKET "OPTIONS $target HTTP/1.0\n\n";
    @result = <SOCKET>;
    close(SOCKET);

    return (join('', @result) =~ /200 OK/ ? 1 : 0);
}

cronで定期的に実行すればOK。

0,20,40 * * * * /path/to/script target.com

2005年 8月
2004年 5月
2003年 11月, 10月, 8月, 5月, 4月, 3月, 2月, 1月
2002年 12月, 11月, 10月, 9月, 8月, 5月, 3月, 2月, 1月
2001年 6月, 5月, 4月, 3月

Copyright (C) Takashi Utsunomiya. All Rights Reserved.