전종필 특히, 시스템 관리자라면 어떤 서버가 살아있는지 확인하고 싶을 때가 많을 것입니다. 특히
우리의 다크호스 Perl 스크립트 내에서...
가장 먼저 떠오르는 생각이라면 backtick (``)을 이용하는 것이리라 생각됩니다.(아닌가요?)
my $host = 'forum.perl.or.kr'; # 실제는 없는 서버입니다. :-)
my $ret = `ping -c 1 $host 2>&1`; # -c 1을 하지 않으면 한없이 돌아가겠지요.
if( $ret =~ /unknown/i ) {
warn "unknown host\n";
} else {
my($loss) = ( $ret =~ /(\d+)% packet loss/ );
if( $loss > 0 ) {
warn "$host is not reachable\n";
}
else {
print "O.K\n";
#... do something ...
}
}
하지만, 위와 같이 한다면 이 글을 쓰지도 않았을 것입니다.
Perl에는 Net::* 모듈들이 있습니다.
그 중에는 Net::Ping도 있고요.
그래서 다음 예에서는 Net::Ping 모듈을 사용합니다.
use Net::Ping;
my $host = 'forum.perl.or.kr'; # 진짜는 없습니다 :-)
$p = Net::Ping->new("icmp"); # icmp와 tcp가 있지만, icmp를 사용하는 것이 좋습니다.
my $ret = $p->ping($host);
if( $ret ) {
print "O.K\n";
#... do something ...
}
else {
warn "$host is not reachable, or unknown host\n";
}
Net::* 모듈들에 대해서 살펴 보십시오.
시스템 관리자들에게는 정말 요긴한 것들이 많이 있습니다.
|