BlowFish
Участник
Привет, есть скрипт perl который запускается с ошибкой - 
Что это? Как победить? Проблема с кодировкой? Если открываю тот же файл kde редактором, например kwrite то все ок - символов не видно.
Скрипт на всякий случай прилагаю.
	
	
	
		
        exit $ERRORS{"UNKNOWN"};
}
if (!defined($o_community) ) {
usage();
exit $ERRORS{"UNKNOWN"};
}
}
[/code]
				
			В midnight commander открываю скрипт и вижу в конце каждой строки символы ^M.^M: bad interpreter: No such file or directory
Что это? Как победить? Проблема с кодировкой? Если открываю тот же файл kde редактором, например kwrite то все ок - символов не видно.
Скрипт на всякий случай прилагаю.
		Код:
	
	#!/usr/local/bin/perl
use strict;
use Getopt::Long;
use Net::SNMP;
my $Version =            "1.2.1 20071018";
my $snmp_timeout =         3;
my $cisco_stack_table =        "1.3.6.1.4.1.9.9.500.1.2.1.1.1";
my $cisco_stack_state =        "1.3.6.1.4.1.9.9.500.1.2.1.1.6";
my $cisco_stack_ring =        "1.3.6.1.4.1.9.9.500.1.1.3.0";
my $status =            "UNKNOWN";
my $session;
my $error;
my $result;
my $stackring_state;
my $o_debug =            0;
my $o_alarm =            0;
my $o_host;
my $o_community;
my $o_version;
my $o_help;
my %members;
my %ERRORS = (
    'OK'        =>    0,
    'WARNING'    =>    1,
    'CRITICAL'    =>    2,
    'UNKNOWN'    =>    3,
    'DEPENDENT'    =>    4,
);
my %STACK_STATES = (
         '1'        =>    'waiting',
         '2'        =>    'progressing',
         '3'        =>    'added',
         '4'        =>    'ready',
         '5'        =>    'sdmMismatch',
         '6'        =>    'verMismatch',
         '7'        =>    'featureMismatch',
         '8'        =>    'newMasterInit',
         '9'        =>    'provisioned',
         '10'        =>    'invalid',
);
##########################
#
#         MAIN
#
##########################
check_options();
($session, $error) = Net::SNMP->session(
        -hostname    => $o_host,
        -community    => $o_community,
        -port        => 161,
        -timeout    => $snmp_timeout
    );
if (!defined($session)) {
    printf("ERROR: %s.\n", $error);
    exit $ERRORS{"CRITICAL"};
}
#
# Get Cisco stack table
#
$result = $session->get_table(
        -baseoid => $cisco_stack_table
    );
if (!defined($result)) {
    printf("ERROR: %s.\n", $session->error);
    $session->close;
    exit $ERRORS{"CRITICAL"};
}
foreach my $key ( keys %{$result}) {
    my $id = ( $$result{$key} * 1000 ) + 1;
    my $oid = "$cisco_stack_state.$id";
    my $result2 = $session->get_request(
            -varbindlist    => [$oid]
        );
    if (!defined($result2)) {
        printf("ERROR: %s.\n", $session->error);
        $session->close;
        exit $ERRORS{"CRITICAL"};
    }
    print "DEBUG: member = $$result{$key} -> oid = $oid -> state = " . $result2->{"$oid"} . "\n" if $o_debug;
    $members{$$result{$key}} = $result2->{"$oid"};
}
if ($o_alarm) {
    $members{"2"} = 6;
    print "-- SIMULATING ALARM -- ";
}
#
# Get Cisco stack ring speed if more than one stack member
#
if ( keys(%{$result}) > 1 ) {
    $result = $session->get_request(
            -varbindlist => [$cisco_stack_ring]
    );
    if (!defined($result)) {
        printf("ERROR: %s.\n", $session->error);
        $session->close;
        exit $ERRORS{"CRITICAL"};
    }
    #
    # Parse SNMP stack ring result
    #
    if ( $result->{$cisco_stack_ring} == 1 ) {
        $stackring_state = "Full";
    }
    else {
        $status = "WARNING";
        $stackring_state = "Half";
    }
    print "DEBUG: snmp_ring_state = " . $result->{$cisco_stack_ring} . " -> ring_state = $stackring_state\n" if $o_debug;
    print "Stack Ring: $stackring_state, ";
}
$session->close;
my $nitems = keys (%members);
my $n = 0;
foreach my $member (keys (%members)) {
    $n++;
    if ( $members{$member} == 4 or 9 ) {
        if (( $status ne "CRITICAL" ) && ( $status ne "WARNING" )) {
            $status = "OK";
        }
    } else {
        $status = "CRITICAL";
    }
    print "Member $member: $STACK_STATES{$members{$member}}";
    if ($n < $nitems) {
        print ", ";
    } else {
        print "\n";
    }
}
print "DEBUG: $status: $ERRORS{$status}\n" if $o_debug;
exit $ERRORS{$status};
##########################
#
#         FUNCTIONS
#
##########################
sub version {
    print "$0 version: $Version\n";
}
sub usage {
    print <<DATA;
Usage: $0 [-V] [-h] [-D] [-A] -H <host> -C <community>
-h, --help
   prints this help message
-V, --version
   prints version number
-D, --debug
   prints debug info. do not use in production.
-A, --alarm
   the plugin simulates an alarm without the need to break the stack!!!
-H, --hostname=HOST
   name or IP address of host to check
-C, --community=STRING NAME
   community name for the host's SNMP agent (implies v1/v2 protocol)
DATA
}
sub help {
    print <<DATA;
SNMP Cisco stack for Nagios version: $Version
Author: Andrea Gabellini - <andrea.gabellini\@telecomitalia.sm>
Check for stack's status of Cisco 3750
DATA
    usage();
}
sub check_options {
    Getopt::Long::Configure ("bundling");
    GetOptions(
        'h'     => \$o_help,        'help'            => \$o_help,
        'V'    => \$o_version,        'version'    => \$o_version,
        'D'    => \$o_debug,        'debug'        => \$o_debug,
        'A'    => \$o_alarm,        'alarm'        => \$o_alarm,
        'H:s'   => \$o_host,        'hostname:s'    => \$o_host,
        'C:s'   => \$o_community,    'community:s'    => \$o_community,
    );
    if (defined ($o_help) ) {
        help();
        exit $ERRORS{"UNKNOWN"};
    }
    if (defined($o_version)) {
        version();
        exit $ERRORS{"UNKNOWN"};
    }
    if (!defined($o_host) ) {
        usage();Привет, есть скрипт perl который запускается с ошибкой - [quote]^M: bad interpreter: No such file or directory[/quote]
В midnight commander открываю скрипт и вижу в конце каждой строки символы ^M.
Что это? Как победить? Проблема с кодировкой?   :VeryAngry:
Если открываю тот же файл kde редактором, например kwrite то все ок - символов не видно.
Скрипт на всякий случай прилагаю.
[code]#!/usr/local/bin/perl
use strict;
use Getopt::Long;
use Net::SNMP;
my $Version =            "1.2.1 20071018";
my $snmp_timeout =         3;
my $cisco_stack_table =        "1.3.6.1.4.1.9.9.500.1.2.1.1.1";
my $cisco_stack_state =        "1.3.6.1.4.1.9.9.500.1.2.1.1.6";
my $cisco_stack_ring =        "1.3.6.1.4.1.9.9.500.1.1.3.0";
my $status =            "UNKNOWN";
my $session;
my $error;
my $result;
my $stackring_state;
my $o_debug =            0;
my $o_alarm =            0;
my $o_host;
my $o_community;
my $o_version;
my $o_help;
my %members;
my %ERRORS = (
    'OK'        =>    0,
    'WARNING'    =>    1,
    'CRITICAL'    =>    2,
    'UNKNOWN'    =>    3,
    'DEPENDENT'    =>    4,
);
my %STACK_STATES = (
         '1'        =>    'waiting',
         '2'        =>    'progressing',
         '3'        =>    'added',
         '4'        =>    'ready',
         '5'        =>    'sdmMismatch',
         '6'        =>    'verMismatch',
         '7'        =>    'featureMismatch',
         '8'        =>    'newMasterInit',
         '9'        =>    'provisioned',
         '10'        =>    'invalid',
);
##########################
#
#         MAIN
#
##########################
check_options();
($session, $error) = Net::SNMP->session(
        -hostname    => $o_host,
        -community    => $o_community,
        -port        => 161,
        -timeout    => $snmp_timeout
    );
if (!defined($session)) {
    printf("ERROR: %s.\n", $error);
    exit $ERRORS{"CRITICAL"};
}
#
# Get Cisco stack table
#
$result = $session->get_table(
        -baseoid => $cisco_stack_table
    );
if (!defined($result)) {
    printf("ERROR: %s.\n", $session->error);
    $session->close;
    exit $ERRORS{"CRITICAL"};
}
foreach my $key ( keys %{$result}) {
    my $id = ( $$result{$key} * 1000 ) + 1;
    my $oid = "$cisco_stack_state.$id";
    my $result2 = $session->get_request(
            -varbindlist    => [$oid]
        );
    if (!defined($result2)) {
        printf("ERROR: %s.\n", $session->error);
        $session->close;
        exit $ERRORS{"CRITICAL"};
    }
    print "DEBUG: member = $$result{$key} -> oid = $oid -> state = " . $result2->{"$oid"} . "\n" if $o_debug;
    $members{$$result{$key}} = $result2->{"$oid"};
}
if ($o_alarm) {
    $members{"2"} = 6;
    print "-- SIMULATING ALARM -- ";
}
#
# Get Cisco stack ring speed if more than one stack member
#
if ( keys(%{$result}) > 1 ) {
    $result = $session->get_request(
            -varbindlist => [$cisco_stack_ring]
    );
    if (!defined($result)) {
        printf("ERROR: %s.\n", $session->error);
        $session->close;
        exit $ERRORS{"CRITICAL"};
    }
    #
    # Parse SNMP stack ring result
    #
    if ( $result->{$cisco_stack_ring} == 1 ) {
        $stackring_state = "Full";
    }
    else {
        $status = "WARNING";
        $stackring_state = "Half";
    }
    print "DEBUG: snmp_ring_state = " . $result->{$cisco_stack_ring} . " -> ring_state = $stackring_state\n" if $o_debug;
    print "Stack Ring: $stackring_state, ";
}
$session->close;
my $nitems = keys (%members);
my $n = 0;
foreach my $member (keys (%members)) {
    $n++;
    if ( $members{$member} == 4 or 9 ) {
        if (( $status ne "CRITICAL" ) && ( $status ne "WARNING" )) {
            $status = "OK";
        }
    } else {
        $status = "CRITICAL";
    }
    print "Member $member: $STACK_STATES{$members{$member}}";
    if ($n < $nitems) {
        print ", ";
    } else {
        print "\n";
    }
}
print "DEBUG: $status: $ERRORS{$status}\n" if $o_debug;
exit $ERRORS{$status};
##########################
#
#         FUNCTIONS
#
##########################
sub version {
    print "$0 version: $Version\n";
}
sub usage {
    print <<DATA;
Usage: $0 [-V] [-h] [-D] [-A] -H <host> -C <community>
-h, --help
   prints this help message
-V, --version
   prints version number
-D, --debug
   prints debug info. do not use in production.
-A, --alarm
   the plugin simulates an alarm without the need to break the stack!!!
-H, --hostname=HOST
   name or IP address of host to check
-C, --community=STRING NAME
   community name for the host's SNMP agent (implies v1/v2 protocol)
DATA
}
sub help {
    print <<DATA;
SNMP Cisco stack for Nagios version: $Version
Author: Andrea Gabellini - <andrea.gabellini\@telecomitalia.sm>
Check for stack's status of Cisco 3750
DATA
    usage();
}
sub check_options {
    Getopt::Long::Configure ("bundling");
    GetOptions(
        'h'     => \$o_help,        'help'            => \$o_help,
        'V'    => \$o_version,        'version'    => \$o_version,
        'D'    => \$o_debug,        'debug'        => \$o_debug,
        'A'    => \$o_alarm,        'alarm'        => \$o_alarm,
        'H:s'   => \$o_host,        'hostname:s'    => \$o_host,
        'C:s'   => \$o_community,    'community:s'    => \$o_community,
    );
    if (defined ($o_help) ) {
        help();
        exit $ERRORS{"UNKNOWN"};
    }
    if (defined($o_version)) {
        version();
        exit $ERRORS{"UNKNOWN"};
    }
    if (!defined($o_host) ) {
        usage();
        exit $ERRORS{"UNKNOWN"};
    }
    if (!defined($o_community) ) {
        usage();
        exit $ERRORS{"UNKNOWN"};
    }
}
	}
if (!defined($o_community) ) {
usage();
exit $ERRORS{"UNKNOWN"};
}
}
[/code]