convert4print übernimmt im Unternehmen häufig geschäftskritische Aufgaben, sodass ein Ausfall des Systems direkte, negative Folgen für den Geschäftsablauf hat. Dem wird in manchen Unternehmen durch den Einsatz von speziellen Überwachungsprogrammen Rechnung getragen. Diese Programme kennen über ein vom Anwender zu definierendes Regelwerk den Gut-Zustand des Rechners und geben Alarm oder ergreifen Gegenmassnahmen, wenn der Gut-Zustand nicht mehr gegeben ist.
Leider sind diese Programme in der Regel sehr teuer und werden nur in Grossunternehmen eingesetzt.
Für Installationen, in denen keine Überwachungssoftware zur Verfügung steht, kann mit Windows Bordmitteln zumindest die Ereignisanzeige überwacht werden.
Die Überwachung der einzelnen convert4print-Netzwerkdienste wie Konverter/Gateway-Server und Management-Konsole ist in der Regel kein Problem, weil es sich um normale Dienste innerhalb des Windows-Systems handelt, für die es Standardmethoden der Überwachung und Steuerung (Starten, Beenden, Neustart, etc) gibt.
Ein Befehlsskript, das in einer Datei mit dem Namen settrigger.cmd enthalten ist, kann die Überwachung der Ereignisanzeige durch das Betriebssystem einrichtet.
Der Befehl zum Einrichten der Überwachung lautet:
eventtriggers /create /tr c4pTrigger /l application /so "c4pService" /tk "perl c:\programm\convert4print\c4pEvents.pl Alles"
Der Parameter /create erstellt einen neuen Ereignisauslöser, der Protokollereignisse überwacht und dann den angegebenen Vorgang ausführt. Der Parameter /tr c4pTrigger bestimmt einen Anzeigenamen, der mit dem Ereignisauslöser assoziiert werden soll. Der Parameter /l application bestimmt das Ereignisprotokoll, von dem Ereignisse überwacht werden. In diesem Fall wird das Anwendungs-Protokoll überwacht. Der Parameter /so „c4pService“ bestimmt eine Ereignisquelle, auf die der Ereignisauslöser reagieren soll, hier den internen Namen des Client/Gateway-Services. Mit dem Parameter /tk „perl …“ wird die auszuführende Aufgabe bestimmt. In diesem Fall hier der Aufruf eines speziellen Perl-Skripts, dem der Parameter Alles mitgegeben wird.
Die Datei settrigger.cmd ist ins Installationsverzeichnis von convert4print zu kopieren. Ein Doppelklick auf diese Datei führt das Skript aus.
Soll nur auf ein bestimmtes Ereignis, zum Beispiel den Start des Konverter/Gateway-Service reagiert werden, kann mit dem Parameter /eid 1002 das konkrete Ereignis benannt werden. Die Bedeutung der einzelnen Ereignis-Nummern kann durch Anzeigen im Anwendungsprotokoll ermittelt werden. Der komplette Befehl sieht dann wie folgt aus:
eventtriggers /create /tr c4pTrigger /l application /so "c4pService" /eid 1002 /tk "perl c:\programm\convert4print\c4pEvents.pl Start"
Der Parameter Start dient nur dem Skript für die Unterscheidung der Ereignisse und ist natürlich je nach eingesetztem Skript entsprechend anzupassen.
Der Vollständigkeit wegen sei hier noch das Beispielskript c4pEvents.pl in Perl aufgeführt. Es liest die letzten zehn Ereignisse für den c4pService aus dem Ereignisprotokoll und versendet sie via EMail an den im Script eingetragenen Empfänger.
#!/usr/bin/perl # Command: perl c4pEvents.pl "msg" use MIME::Lite; use Win32::EventLog; use strict; # Parameter die ggf. angepasst werden müssen my $MailServer = '10.1.1.1'; # Name oder IP des Mailservers my $To = 'admin@www.spe-gmbh.de'; # Empfänger der Nachricht my $From = 'c4pService@c4p.spe-gmbh.de'; # Absender der Nachricht #---------------------------------------------------------------------------# sub Abort { exit $_[0]; } #---------------------------------------------------------------------------# sub GetEvents { my ($recs, $base, $off, $count, $Text, $hashRef); my $handle=Win32::EventLog->new("Application", $ENV{ComputerName}) or return "Fehler: Anwendungsprotokoll kann nicht geoeffnet werden.\n"; $handle->GetNumber($recs) or return "Fehler: Anzahl der Ereignisse kann nicht gelesen werden.\n"; $handle->GetOldest($base) or return "Fehler: Aeltester Eintrag kann nicht gelesen werden.\n"; $off = $recs - 1; $count = 0; $Text = ""; while ($off >= 0 && $count < 10) { $handle->Read(EVENTLOG_BACKWARDS_READ|EVENTLOG_SEEK_READ, $base+$off, $hashRef) or return "Fehler: Eintrag $off kann nicht gelesen werden.\n"; if ($hashRef->{Source} eq "c4pService") { Win32::EventLog::GetMessageText($hashRef); my $Msg = $hashRef->{Message}; $Msg =~ s/\r\n*$//; # CRLF am Ende entfernen $Msg =~ s/\r\n/|/g; # eingebettete CRLF ersetzen my $EID = $hashRef->{EventID} & 1073741823; my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $idst) = localtime ($hashRef->{TimeGenerated}); $Text = $Text . sprintf ("%d %02d.%02d.%4d %02d:%02d:%02d %7d '%s'\n", $hashRef->{EventType}, $mday, $mon+1, $year+1900, $hour, $min, $sec, $EID, $Msg); $count++; } $off--; } return $Text; } #---------------------------------------------------------------------------# my $Msg = $ARGV [0]; Abort 100 if ($Msg eq ""); # Fehlerhafte Kommandozeile # Die Nachricht erzeugen: my $Text = "\nDurch den c4pService erzeugte Nachricht.\n" . "\nUrsprung: $Msg\n\n" . "----- Auszug aus der Ereignisanzeige für c4pService ----\n\n" . GetEvents() . "--------------------------------------------------------\n\n"; # siehe MIME::Lite Dokumentation für Schlüsselworte my $msg = MIME::Lite->new (To =>$To, From =>$From, Subject =>'c4pService Protokollmeldung', Data =>$Text); MIME::Lite->send ('smtp', $MailServer, Timeout=>60); $msg->send || Abort 120; exit 0;
Es lassen sich mehrere unterschiedliche Ereignisse gleichzeitig überwachen. Dazu muss der Befehl eventtriggers nur mehrfach aufgerufen werden. Je nach gestartetem Skript oder Programm können die dabei ausgelösten Aktionen praktisch beliebiger Natur sein.