普段はLinuxでWebサーバ管理したりとか、Windowsアプリをちょろちょろと作ったりとかしてます。
ここは仕事で悪戦苦闘した内容などを備忘録としてメモするための場所にしてます。
尚、情報に対する責任は一切持ちませんw
わざわざNagiosやらを入れるのが面倒だったときに使った、サーバ監視(PING)用アプリです。
対象機器にPINGを行い、エラーがあったらメールを送るという内容です。
Perlで作っており、これをCronにて定期実行させ、サーバ監視してました。
大した内容ではありませんが、メモとして。
use Net::Ping;
use strict;
use warnings;
use Encode;
use utf8;
sub my_sendmail($) {
my ($servers) = @_;
my $sendmail = '/usr/sbin/sendmail'; # sendmailコマンドパス
my $from = 'admin@hoge.jp'; # 送信元メールアドレス
my $to = 'hepo@hogehoge.co.jp'; # あて先メールアドレス
my $cc = 'hogecc@hogehoge.co.jp'; # Ccのあて先メールアドレス
my $subject = '[PING ERROR] '. $servers; # メールの件名
my $msg = <<"_TEXT_"; # メールの本文(ヒアドキュメントで変数に代入)
ping failed...
_TEXT_
$msg = $msg . $servers;
# sendmail コマンド起動
open(SDML,"| $sendmail -t -i") || die 'sendmail error';
# メールヘッダ出力
print SDML "From: $from\n";
print SDML "To: $to\n";
print SDML "Cc: $cc\n";
print SDML "Subject: $subject\n";
print SDML "Content-Transfer-Encoding: 7bit\n";
print SDML "Content-Type: text/plain;\n\n";
# メール本文出力
print SDML "$msg";
# sendmail コマンド閉じる
close(SDML);
};
my @hosts=("www.hoge.jp", "db1.hoge.jp", "db2.hoge.jp"); #監視ホストを記載
my $timeout=5;
my $pObj = Net::Ping->new("icmp");
my $err_svs = "";
while(my $host = shift(@hosts)){
if($pObj->ping($host, $timeout)){
#----------------
# PING OK!
#----------------
#print "$host is running.\n";
}else{
#----------------
# PING FAIL!
#----------------
$err_svs = $err_svs . " " .$host;
}
}
if(!($err_svs eq "")){
my_sendmail($err_svs);
}
$pObj->close();