Tips in Action‎ > ‎기타‎ > ‎

스크립트 안에서 ping을 할 수 있나?

전종필

특히, 시스템 관리자라면 어떤 서버가 살아있는지 확인하고 싶을 때가 많을 것입니다. 특히 우리의 다크호스 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::* 모듈들에 대해서 살펴 보십시오. 시스템 관리자들에게는 정말 요긴한 것들이 많이 있습니다.
Comments