今天需要写一个脚本检查别部门提供服务给我们的两台机器的服务提供情况和网络状况,本想用expect脚本来写,但是之前“自行车DD”用过了perl的expect模块,虽然跟expect的tcl差异比较大,不过用统一的工具感觉更好吧,而且可以很方便的使用正则表达式来匹配文本,进行日志记录,输出信息等,用用也无妨吧——反正之前也已经有一些例子了。简简单单的写了一个检查两台服务器服务器端口和网络通断的perl脚本,放在crontab,每五分钟执行一下,然后写日志:
#!/usr/bin/perl -w
use strict;
use Expect;
my %inter=(
'192.168.10.17' => "19907",
'192.168.10.28' => "9000"
);
my $date = `date`;
chomp $date;
my $Logdate = `date '+%Y%m%d'` ;
chomp $Logdate;
open(LOG,">>/root/checkmsg/check$Logdate.log");
while( my ($ip, $port) = each(%inter) ) {
my $exp = Expect->spawn("telnet $ip $port") or die "Cannot spawn telnet: $!\n";
my $timeout = 60;
my $telnet_ok = 0;
$exp->expect($timeout,
[ qr/Connected/i, sub { my $exp = shift; $exp->send("^]\n"); exp_continue; } ],
[ 'telnet>', sub { $telnet_ok = 1; my $exp = shift; $exp->send("quit\n"); $exp->hard_close(); } ],
[ qr/refused/i, sub { $exp->soft_close(); } ],
[ eof => sub { print "eof \n"; } ],
[ timeout => sub { die "No login.\n"; } ]
);
if( $telnet_ok ) {
print LOG "[$date] $ip:$port Test OK!\n";
}
else {
print LOG "[$date] $ip:$port Test Failed!\n";
}
}
print LOG `ping 192.168.10.17 -c 10|grep transmitted`;
print LOG "\n";
运行了一会儿,发现日志生成不少,但是却为查看错误信息造成麻烦……太多内容啦。一会儿回家之后,考虑不输出,或者少输出正确日志吧,只把有问题的打印出来就行了.