나는 perl에 익숙하지 않다. 나는 Nagios 체크를 수정할 필요가있다. 진행 방법에 대한 조언을 주시면 감사하겠습니다.Nagios의 펄 정규식 체크
https://www.claudiokuenzler.com/nagios-plugins/check_smart.php
이 스크립트는 하드 드라이브의 SMART 값을 확인 및 모니터링을위한 간단한 형태로 결과를 제공 할 수 있습니다 : 내가 사용 체크는 여기 check_smart이다. 스크립트는/dev/sd [a-c] 형식으로 정규식을 취할 수 있습니다.
# list of devices for a loop
my(@dev);
if ($opt_d){
# normal mode - push opt_d on the list of devices
push(@dev,$opt_d);
} else {
# glob all devices - try '?' first
@dev =glob($opt_g);
}
foreach my $opt_dl (@dev){
warn "Found $opt_dl\n" if $opt_debug;
if (-b $opt_dl || -c $opt_dl){
$device .= $opt_dl.":";
} else {
warn "$opt_dl is not a valid block/character special device!\n\n" if $opt_debug;
}
}
이전은 $ opt_d 것 같다 때 변수가 $ opt_dl은 왜 아주 이해가 안 :이이를 수있는 부분이라고 생각합니다. 그러나 결과는 다음과 같습니다. OK : [/ dev/sda] - 장치가 깨끗함 - [/ dev/sdb] - 장치가 깨끗함 - [/ dev/sdc] - 장치 깨끗한가
EDIT : 여기에 $ opt_d가 설정된 코드가 있습니다. 더 많은 생각에 $ opt_dl은 단지 $ opt_d 인 것처럼 보입니다.
use vars qw($opt_b $opt_d $opt_g $opt_debug $opt_h $opt_i $opt_v);
Getopt::Long::Configure('bundling');
GetOptions(
"debug" => \$opt_debug,
"b=i" => \$opt_b, "bad=i" => \$opt_b,
"d=s" => \$opt_d, "device=s" => \$opt_d,
"g=s" => \$opt_g, "global=s" => \$opt_g,
"h" => \$opt_h, "help" => \$opt_h,
"i=s" => \$opt_i, "interface=s" => \$opt_i,
"v" => \$opt_v, "version" => \$opt_v,
);
나는 비슷한 방식으로 변경하려면 코드의 일부는 다음과 같습니다 특히
# Allow all device types currently supported by smartctl
# See http://www.smartmontools.org/wiki/Supported_RAID-Controllers
if ($opt_i =~ m/(ata|scsi|3ware|areca|hpt|cciss|megaraid|sat)/) {
$interface = $opt_i;
} else {
print "invalid interface $opt_i for $opt_d!\n\n";
print_help();
exit $ERRORS{'UNKNOWN'};
}
, 나는 "메가 RAID, [같은 스크립트 뭔가를 통과 할 수 있도록하고 싶습니다 5-8]. 이 경우 장치에 대한 정규 표현식을 전달하지 않고/dev/sda가됩니다.
누구나 내가이 점에 대해 조언을 해줄 수 있다면 고맙겠습니다!
'$ opt_d'에 대해서는 설정하는 코드를 보지 않고서는 논평하기가 어렵습니다. '$ opt_dl'는'@ dev' 배열을 반복하는데 사용되는데, 이것은 장치 목록을 가지고 있다고 생각합니다. – codeforester
답장을 보내 주셔서 감사합니다. $ opt_d 설정 방법을 보여주기 위해 게시물을 편집했습니다. – user2792137