我编写了一个 Perl 脚本,该脚本将启动一个 SNMP 会话并提取数据/计数器及其对 csv 文件的值。有 7 个 perl 脚本;顶部有不同的属性/定义/变量..但引擎是相同的。
此时,除了定义的变量之外,这 7 个 perl 脚本都是多余的。有没有办法将执行 perl 脚本保存为属性/执行文件并将引擎保存在另一个文件中?这个属性/执行 perl 脚本将调用引擎(使用在它自己的脚本中定义的属性)。
所以简而言之,我想在他们自己的脚本中使用变量(也作为一个执行),但是从一个统一的“引擎”调用一个特定的函数。
IE
取回_mibs1.pl 取回_mibs2.pl 取回_mibs3.pl 取回_mibs4.pl 取回_mibs5.pl 取回_mibs6.pl 取回_mibs7.pl
检索_mibs1.pl
#!/usr/local/bin/perl
use Net::SNMP;
##DEFINITION START
my @Servers = (
'server1',
'server2',
);
my $PORT = 161;
my $COMMUNITY = 'secret';
my $BASEOID = '1.2.3.4.5.6.7.8';
my $COUNTERS = [
[11,'TotalIncomingFromPPH'],
[12,'TotalFailedIncomingFromPPH'],
];
##ENGINE START
sub main {
my $stamp = gmtime();
my @oids = ();
foreach my $counter (@$COUNTERS) {
push @oids,("$BASEOID.$$counter[0].0");
}
foreach my $server (@Servers) {
print "$stamp$SEPARATOR$server";
my ($session,$error) = Net::SNMP->session(-version => 1,-hostname => $server,-port => $PORT,-community => $COMMUNITY);
if ($session) {
my $result = $session->get_request(-varbindlist => \@oids);
if (defined $result) {
foreach my $oid (@oids) {
print $SEPARATOR,$result->{$oid};
}
} else {
print STDERR "$stamp Request error: ",$session->error,"\n";
print "$SEPARATOR-1" x scalar(@oids);
}
} else {
print STDERR "$stamp Session error: $error\n";
print "$SEPARATOR-1" x scalar(@oids);
}
print "\n";
}
}
main();