Назад | Перейти на главную страницу

Скрипт Perl, который возвращает несколько кодов выхода

У меня есть сценарий 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;
}