1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
sub SendReportMail{
my %conf = %{shift()};
my $meldung = shift || "Es wurde keine Meldung bereitgestellt!";
my $betriff = shift || "Meldung vom Monitoring-System!";
my %mail = ( To => $conf{email_to},
From => $conf{email_from},
Message => $report_text,
Subject => $report_subject,
);
$mail{auth} = {user=>$conf{email_from}, password=>$conf{email_pwd}, required=>$conf{email_required} };
$mail{Smtp} = $conf{email_smtp};
sendmail(%mail) or die $Mail::Sendmail::error;
print "OK. Log says:\n", $Mail::Sendmail::log;
}#end-SendReportMail
print xxxxx if run_as_service;
perl meine-funkion.pl
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 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
#!/usr/bin/perl use strict; use warnings; use Getopt::Long; use Win32::Service; use Mail::Sendmail; # main-parameeters my %config=( "logmail"=>0, # 1... immer eine LogMail verschicken "service"=>'', # Name des Service; wird keiner angegeben, dann Fehlermail "title_err"=>'name of service', # Betrefftext für die FehlerMail "title_log"=>'name of service', # Betrefftext für die LogMail "message"=>'message in error-mail', # Text für die Fehlerinfo-Email "email_to"=>'', # es kann auch eine Liste von Empfängern angegeben werden, Trennzeichen ";" "email_from"=>'gis-hotline@ebhl.de', # von wem wird die eMail versandt "email_pwd"=>'GH2014wiki', # Anmeldepasswort am Exchange "email_required"=>1, # eine Authorisierung erforderliche? "email_smtp"=>'ma22-ex-002.local.ebhl.de', # Exchange-Server ); GetOptions ( "help|h" => sub{ Usage(); }, "logmail" => sub{ $config{logmail}=1; }, "service=s" => \$config{service}, "terr=s" => \$config{title_err}, "tlog=s" => \$config{title_log}, "message=s" => \$config{message}, "to=s" => \$config{email_to}, ) or Usage(); my $hostname = '127.0.0.1'; # this means local host. my $name_of_this_machine = (gethostbyname ("localhost"))[0]; my $report_text = ''; my $report_subject = $name_of_this_machine." - Service: ".$config{service}." - Statusreport"; my $report_subject_error = "FEHLER - ".$name_of_this_machine." - Service: ".$config{service}; print "Rechnername: ".$name_of_this_machine."\n"; if ($config{email_to} !~ /^([a-zA-Z0-9][a-zA-Z_0-9-\.]*)(\@)([a-zA-Z0-9][a-zA-Z_0-9-\.]*[a-zA-Z0-9])(\.)([a-zA-Z0-9]*)$/) { print "** Es wurde keine gueltige Empfaenger-eMail-Adresse angegeben!!**\n\n"; $report_subject = "** ".$report_subject; $report_text .= "\n\nEs wurde keine gueltige Zieladresse fuer die eMail angegeben!!\n\n"; # bevor es keine Adresse gibt, dann an mich selber schicken - die groesste Chance jemanden zu erreichen $config{email_to} = $config{email_from}; # auf jeden Fall eine eMail verschicken. $config{logmail} = 1; } my %info; # wenn kein Service-Name angegeben, dann wir automatisch eine Mail an den Admin versandt!! if ($config{service} eq "") { print "** Es wurde kein Service angegeben!!**\n\n"; $report_text .= "\n\n\nFataler Fehler in Prueffunktion - es wurde kein Service-Name angegeben !!\n\n"; # Hervorheben der Überschrift $report_subject = "** ".$report_subject; # Zwangsemail wird verschickt $config{logmail} = 1; } else { print "Service zu pruefen: ".$config{service}."\n"; my %state_code = ( 1 => 'not running', 2 => 'start pending', 3 => 'stop pending', 4 => 'running', 5 => 'resume pending', #wieder anhängig 6 => 'pause pending', #pause anhängig 7 => 'paused' ); Win32::Service::GetStatus($hostname,$config{service},\%info); $report_text .= "Service: ".$config{service}."\n"; $report_text .= "Hostname: ".$hostname."\n"; $report_text .= "Status: ".$info{'CurrentState'}." -> ".$state_code{$info{'CurrentState'}}."\n"; #print "\tState: ", $state_code{$info{'CurrentState'}} || $info{'CurrentState'} , "\n"; # nachfolgende Daten werden in die eMail mit aufgenommen ! print "\tStateNo: ".$info{'CurrentState'}."\n"; $report_text .= "PID: $info{'ProcessId'}\n" if ($info{'ProcessId'}); $report_text .= "Exited with code $info{'Win32ExitCode'}.\n" if ($info{'Win32ExitCode'}); $report_text .= "Exited with error; code $info{'ServiceSpecificExitCode'} was logged.\n" if ($info{'ServiceSpecificExitCode'}); $report_text .= "Approx. $info{'WaitHint'} milliseconds until complete.\n" if ($info{'WaitHint'}); $report_text .= "Checkpoint: $info{'CheckPoint'}\n" if ($info{'CheckPoint'}); } # endif-wurde ein Service-Name übergeben? # wenn immer eine eMail an den Admin verschickt werden soll SendReportMail(\%config, $report_text, $report_subject_error) if ($info{'CurrentState'} != 4); # wenn immer eine eMail an den Admin verschickt werden soll SendReportMail(\%config, $report_text, $report_subject) if ($config{logmail} ==1); sub Usage { my( $message ) = @_; if( $message ) { print "$message\n"; } print "******hier muss noch dokumentiert werden ******\n"; print "\t-help this help\n"; print "....\n"; exit 0; # beenden } sub SendReportMail{ my %conf = %{shift()}; my $meldung = shift || "Es wurde keine Meldung bereitgestellt!"; my $betriff = shift || "Meldung vom Monitoring-System!"; my %mail = ( To => $conf{email_to}, From => $conf{email_from}, Message => $report_text, Subject => $report_subject, ); $mail{auth} = {user=>$conf{email_from}, password=>$conf{email_pwd}, required=>$conf{email_required} }; $mail{Smtp} = $conf{email_smtp}; sendmail(%mail) or die $Mail::Sendmail::error; print "OK. Log says:\n", $Mail::Sendmail::log; }#end-SendReportMail