2013-10-03 63 views
1

擴展SNMPD我有一個CentOS 6.4,我檢查守護進程通過命令運行snmpwalk -v 2C -c公共本地主機OID的功能。現在用Perl和內部命令

如果我使用的腳本this doc一切工作和我的自定義(我做到了)MIB是乾淨的結果是正確的。

我想要更多,所以我這樣做:

#!/usr/bin/perl 

use NetSNMP::agent (':all'); 
use NetSNMP::ASN qw(ASN_OCTET_STR ASN_INTEGER); 
#$string_value = qx{/tmp/readabilityChk}; 
#print $string_value; 
#&hello_handler(); 
sub hello_handler { 
    my ($handler, $registration_info, $request_info, $requests) = @_; 
    my $request; 

    #my $string_value = "cipolline"; 
    my $integer_value = "8675309"; 

    my $string_value = `/tmp/readabilityChk`; 

    for($request = $requests; $request; $request = $request->next()) { 
    my $oid = $request->getOID(); 
    if ($request_info->getMode() == MODE_GET) { 
     if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.2021.150.1.1.3")) { 
     $request->setValue(ASN_OCTET_STR, $string_value); 
     } 
     elsif ($oid == new NetSNMP::OID(".1.3.6.1.4.1.2021.150.1.1.100")) { 
     $request->setValue(ASN_INTEGER, $integer_value); 
     } 
    } elsif ($request_info->getMode() == MODE_GETNEXT) { 
     if ($oid == new NetSNMP::OID(".1.3.6.1.4.1.150.2021.1.1.3")) { 
     $request->setOID(".1.3.6.1.4.1.2021.150.1.1.100"); 
     $request->setValue(ASN_INTEGER, $integer_value); 
     } 
     elsif ($oid < new NetSNMP::OID(".1.3.6.1.4.1.2021.150.1.1.3")) { 
     $request->setOID(".1.3.6.1.4.1.2021.150.1.1.3"); 
     $request->setValue(ASN_OCTET_STR, $string_value); 
     } 
     elsif ($oid < new NetSNMP::OID(".1.3.6.1.4.1.2021.150.1.1.100")) { 
     $request->setOID(".1.3.6.1.4.1.2021.150.1.1.100"); 
     $request->setValue(ASN_INTEGER, $integer_value); 
     } 
    } 
    } 
} 

my $agent = new NetSNMP::agent(); 
$agent->register("hello_world", ".1.3.6.1.4.1.2021.150", 
        \&hello_handler);` 

的問題是,在snmpwalk的得出:UCD-CUSTOM-MIB ::定製= STRING: 或現在UCD-CUSTOM-MIB ::定製=沒有留在這個MIB查看更多變量(這是過去MIB樹的末端)

日誌我有這個在

:非字符串值傳遞與ASN_OCTET_STR/ASN_BIT_STR給setValue:類型爲0

我認爲問題是(神祕地)不是字符串的var的類型。但我真的不知道如何解決它。

請幫我T_T

回答

0

問題是的/ tmp /目錄不是用於SELinux的可執行文件的位置,所以沒有劇本可能從那裏運行。該溶液之實踐是關閉的SELinux或在適當的目錄中移動.SH(像的libexec)