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