Readers: 21
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
#!/usr/bin/perl require "sendmail.pl"; use Win32; $SName = Win32::NodeName(); $Pfad = "D:\\ADMIN\\rman\\logs"; $Log_Name = "BACKUP_XX_ARCH.LOG"; @logfiles = qw/"BACKUP_XX_ARCH.log" "BACKUP_XX_FULL.LOG"/; $bodyfile = "D:\\admin\\perl\\temp\\RBL.txt"; $Fehler = 0; my @errors; foreach my $Log_Name (@logfiles) { if (-f $Log_Name) { my $mtime = ($Writetime) = (stat(@logfiles))[8,9]; if $Writetime = <hier weiter...> open(InFile,"$Pfad\\".$Log_Name); while(<InFile>) { $Text .= $_; } close(InFile); $Text =~ /(ERROR)/g; if ($1 eq "ERROR") { $Fehler = 1; $Fehler_Text .= $Text; , push @errors, $Text; } else { $Fehler_Text .= "Check RMAN-Log OK!\n"; } <sonst hier weiter> } else { push @errors, "Log $Log_Name nicht von heute\n"; } if (@errors) { open (FO,">$bodyfile"); print FO @errors."\n"; close(FO); print "$Fehler_Text"; sendmail("RMAN_Error",$bodyfile); exit 999; } else { sendmail("RMAN_OK",$bodyfile); }
my $Modifytime = -M $Logfile;
QuoteCode (perl): (dl )@logfiles = qw/"BACKUP_XX_ARCH.log" "BACKUP_XX_FULL.LOG"/;
@logfiles = qw/BACKUP_XX_ARCH.log BACKUP_XX_FULL.LOG/;
if( $Text =~ /ERROR/ ) {...}
if( index( $Text, 'ERROR' ) != -1 ) { ... }
2009-11-03T15:11:23 michaelf2050erstmal danke an alle - werde versuchen mit den Infos mein Script umzusetzen - eine Frage hab ich noch - wie kann ich auf das aktuelle Datume (datum heute) referenzieren - danke
1 2
my @now = (localtime)[0..5]; my $datum = sprintf("%02d.%02d.%04d",$now[3],++$now[4],$now[5]+1900);# Aktuelles Tagesdatum im Format TT.MM.JJJJ
1 2 3 4 5 6
my @modifydate = (localtime( time - ( 86400 * -M $logfile ) ))[3..5]; my @today = (localtime)[3..5]; if( "@modifydate" eq "@today" ) { print "$logfile wurde heute zuletzt bearbeitet\n"; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
#!/usr/bin/perl use strict; use warnings; require "sendmail.pl"; # wofür brauchst du das? use Win32; my $SName = Win32::NodeName(); my $Pfad = "D:\\ADMIN\\rman\\logs"; # Anführungszeichen unnötig, stören sogar # einmal mit kleinem .log einmal mit großem .LOG? my @logfiles = qw/BACKUP_XX_ARCH.log BACKUP_XX_FULL.LOG/; my $bodyfile = "D:\\admin\\perl\\temp\\RBL.txt"; my $Fehler = 0; my $Fehler_Text=''; my @errors; foreach my $Log_Name (@logfiles) { if (-f $Log_Name) { # Da stimmt aber was nicht... # my $mtime = ($Writetime) = (stat(@logfiles))[8,9]; # wolltest du sowas schreiben? my ($atime, $mtime)=(stat("$Pfad\\$Log_Name"))[8,9]; # auch bei stat den vollständigen Pfad angeben. # Änderung am Logfile jünger als 24 Stunden if(time()-$mtime < 24*60*60) { # lexikalische Filehandles und Fehlermeldung # open lifert bei Erfolg true (1) zurück if(open(my $InFile,"$Pfad\\$Log_Name")) { # Trennzeichen für ReadLine auf undef setzen # => ganze Datei einlesen local $/=undef; my $Text=<$InFile>; close($InFile); # der match-Operator gibt beim auffinden "true" (1) zurück if ($Text =~ /ERROR/) { $Fehler = 1; $Fehler_Text .= $Text; push @errors, $Text; } else { $Fehler_Text .= "Check RMAN-Log OK!\n"; } } else { # in $! steht der Fehler beim open. push @errors, "Log $Log_Name konnte nicht geöffnet werden ($!)\n"; } } else { push @errors, "Log $Log_Name nicht von heute\n"; } } else { push @errors, "Log $Log_Name existiert nicht\n"; } } if (@errors) { open (FO,">$bodyfile"); print FO @errors."\n"; close(FO); print "$Fehler_Text"; sendmail("RMAN_Error",$bodyfile); exit 999; } else { sendmail("RMAN_OK",$bodyfile); }