Perl Frage

l0n

Enthusiast
Thread Starter
Mitglied seit
13.03.2005
Beiträge
994
Ort
Amstetten, nähe Ulm
Moin Leute,

ich hab ein kleines Problem mit einem Perl Script. Das Script soll aus einer Datei einen Wert auslesen und diesen mit einem Definiertem Limit vergleichen. Es soll eine Warnung kommen wenn 90 % der Limits erreicht sind, dann eine Warnung wenn das Limit überschritten worden ist und solange keine der beiden Bedienungen erfüllt ist soll das Script den Wert einfach nur ausgeben.

Zusätzlich soll eine Warnung ausgegeben werden wenn die Datei mit dem zu kontrollierenden Wert nicht gefunden werden kann.

GetOpts sind -l für das Limit und -f für die Pfadangabe zur Datei.

Eigentlich ein simples Script aber Perl schiesst es jedesmal ab mit dem Fehler "Out of Memory!"

Hier mal der Code:

Code:
#!/usr/local/bin/perl
#This Script checks some Logfiles for Threshold of defined Values
#
#
#
use strict;
sub init();
{
use GetOpt::Std;
my @ARGV;
my $file = $ARGV[0];                                                                            #File wird als Parameter übergeben
my $opts_l = $ARGV[1];                                                                            #Schwellenwert wird als Parameter übergeben
GetOptions ("l:" => $opts_l, "f:" => $file);
}
    
my $file;
my %ERRORS;    
my $print;
                                                                                    
if (-e $file)                                                                                    #Prüfung ob Datei vorhanden
{
    open(IN, $file); 
    $file = <IN>;                                                  
}
else
{
    $print = "2: Datei $file nicht vorhanden
                 exit $ERRORS{'CRITICAL'}";
                                                                                                    #Wenn Datei nicht gefunden Kritisch
};

if ($opts_l == undef)      
{                                                                                                  #Wenn kein Schwellenwert gesetzt ist            
                                                                                                #wird automatisch ein Wert gesetzt
    $opts_l == 1000;                                                                            #Voreingestellter Schwellenwert
}        
else       
{
};
                                                                      
if ($file == $opts_l)                                                                            #Wenn Wert größer Limit Warnung
{        
    $print = "$opts_l: LIMIT $opts_l wurde überschritten
                           exit $ERRORS{"CRITICAL"}";
}
else
{
    if ($file < $opts_l)                                                                        #Wenn Wert kleiner als Limit OK                                            
    {
        $print = "$opts_l: Anzahl Mails ausgehend letzte Std: $opts_l"                            #Ausgabe wenn kein Fehler vorliegt
                        "exit $ERRORS{"OK"}";

    }
    else
    {
        if ($file > ($opts_l / 100 * 90))                                                        #Wenn Wert 90% Limit Erreicht Warnung
            {
                 $print    = "$opts_l: 90 % vom LIMIT $opts_l wurden erreicht
                        exit $ERRORS{"WARNING"}";
                        
            }
        else
            {
                $print    = "$opts_l: Anzahl Mails ausgehend letzte Std: $opts_l"                    #Ausgabe wenn kein Fehler vorliegt
                        "exit $ERRORS{"OK"}";
                                                                                                #Wert wird in Ausgabe geschrieben
            };    
    };
};
             
print $print;                                                                                    #Ausgabe

close(IN);                                                                                         #File schliessen

Die paar Zeilen werden wohl keine 4 GB Ram auslasten oder? Oder sieht da wer grobe Fehler die das ganze ineffizient machen?

Danke schonmal ;)
 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Das script läuft überhaupt bei dir?
Benutz mal use warnings und schau ob du da noch fehler bekommst.
Bei mir hatte ich jedenfalls wahnsinnig viele fehler um da irgendwas rauszufinden.
 
auch mit use warnings kommen keine Fehler und ja, das Script läuft bis auf den Out of Memory Fehler.
 
Ohne warnings:
Can't locate GetOpt/Std.pm in @INC (@INC contains: /usr/lib/perl5/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl /usr/lib/perl5/site_perl/5.10.1 /usr/share/perl5/site_perl/5.10.1 /usr/lib/perl5/current /usr/lib/perl5/site_perl/current .) at numtest.pl line 9.
BEGIN failed--compilation aborted at numtest.pl line 9.
Wenn dieser Fehler behoben wird:
String found where operator expected at numtest.pl line 44, near "CRITICAL"}""
String found where operator expected at numtest.pl line 50, near "OK"}""
String found where operator expected at numtest.pl line 58, near "WARNING"}""
String found where operator expected at numtest.pl line 64, near "OK"}""
Global symbol "$opts_l" requires explicit package name at numtest.pl line 32.
Global symbol "$opts_l" requires explicit package name at numtest.pl line 35.
Global symbol "$opts_l" requires explicit package name at numtest.pl line 41.
Global symbol "$opts_l" requires explicit package name at numtest.pl line 43.
Global symbol "$opts_l" requires explicit package name at numtest.pl line 43.
syntax error at numtest.pl line 44, near "}"
(Might be a runaway multi-line "" string starting on line 43)
Global symbol "$opts_l" requires explicit package name at numtest.pl line 47.
syntax error at numtest.pl line 52, near "}"
Global symbol "$opts_l" requires explicit package name at numtest.pl line 55.
Missing right curly or square bracket at numtest.pl line 72, at end of line
numtest.pl has too many errors.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh