#!/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"=>'XXXXX@xxxxxxxxxx.de', # von wem wird die eMail versandt "email_pwd"=>'**********', # Anmeldepasswort am Exchange "email_required"=>1, # eine Authorisierung erforderliche? "email_smtp"=>'xxxxx.local.xxxx.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 = ''; # 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', # ... ); Win32::Service::GetStatus($hostname,$config{service},\%info); #.... #print "\tState: ", $state_code{$info{'CurrentState'}} || $info{'CurrentState'} , "\n"; # nachfolgende Daten werden in die eMail mit aufgenommen ! print "\tStateNo: ".$info{'CurrentState'}."\n"; # .... } # 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);