У меня есть сценарий Perl, который выполняет внутри него другой сценарий Perl:
#!/usr/bin/perl
use strict;
use warnings;
use Getopt::Long qw(:config no_ignore_case bundling_override);
no warnings 'uninitialized';
#print '<<<check_jenkins_jobs>>>';
my ($port, $host) ;
# Parse command line arguments
GetOptions ('host=s' => \$host, 'port=s' => \$port);
if( (!defined($host)) || (!defined($port))) {
print "USAGE:perl $0 -host mbiradar2d -port 8080";
exit 1;
}
use constant {
OK => 0,
WARNING => 1,
CRITICAL => 2,
UNKNOWN => 3,
};
my @output = `perl "H:\\Mangesh\\check_jenkins_jobs.pl" -host $host -port $port`;
my $line;
my $status;
my $statustxt;
foreach $line (@output) {
#print $line;
my @values = split('~', $line);
if($values[0] =~ /^CRITICAL/) {
$status = 2;
$statustxt = 'CRITICAL';
print "$values[0] : $values[1] has health score $values[2]";
exit CRITICAL;
}
elsif($values[0] =~ /^WARNING/) {
$status = 1;
$statustxt = 'WARNING';
print "$values[0] : $values[1] has health score $values[2]";
exit WARNING;
}
else {
$status = 0;
$statustxt = 'OK';
print "$values[0] : $values[1] has health score $values[2]";
exit OK;
}
}
Вот результат внутреннего Perl-скрипта, который я разбираю в приведенном выше скрипте для дальнейшего использования:
CRITICAL ~ First_run ~ Build stability: 3 out of the last 4 builds failed. ~ 25
CRITICAL ~ Mangesh_Testing ~ Build stability: All recent builds failed. ~ 0
CRITICAL ~ MKS_Integrity ~ Build stability: All recent builds failed. ~ 0
OK ~ MKS_TEST ~ Build stability: No recent builds failed. ~ 100
CRITICAL ~ Rest_api_testing ~ ~ no score
CRITICAL ~ Second_job ~ ~ no score
OK ~ Team_test ~ Build stability: No recent builds failed. ~ 100
OK ~ test ~ Build stability: No recent builds failed. ~ 100
CRITICAL ~ TEST_1 ~ Build stability: 2 out of the last 3 builds failed. ~ 33
OK ~ Update_Outlook ~ Build stability: No recent builds failed. ~ 100
Но проблема в том, что этот сценарий завершается после вывода первой строки внутреннего вывода сценариев Perl. Я хочу выйти из этого сценария с распечаткой каждой выходной строки. Как еще я могу этого добиться? Было бы лучше, если бы этот сценарий завершился в соответствии с выходными данными, совместимыми с Nagios. Например, 0 для ОК, 1 для ПРЕДУПРЕЖДЕНИЯ, 2 для КРИТИЧЕСКИХ и 3 для НЕИЗВЕСТНО
Вы рассказываете сценарий exit
после первой строки, которая каждая exit
заявление в if
блоки.
Если вы хотите, чтобы логика вашего скрипта оставалась прежней, но вы хотите распечатать все, позвольте ему распечатать вывод в отдельном цикле перед обработкой и выходом.
foreach $line (@output) {
print $line;
}