==== Lokale Überwachung ==== In großen (p2f)-Installationen sind oft Verwaltungs- und Überwachungssysteme vorhanden, die auch mit (p2f) zusammenarbeiten sollen. Die Überwachung der einzelnen (p2f)-Netzwerkdienste wie Server, Router, Proxy, Client/Gateway-Service und Software-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. Auch die Überwachung der Fehlermeldung dieser Dienste ist eine Standardaufgabe, weil alle (p2f)-Dienste Meldungen in der Ereignisanzeige des Windows-Systems absetzen. Auch dafür gibt es Standardmethoden der Überwachung. Um aber einzelne Clients oder Gateways steuern zu können, bedarf es der Unterstützung durch ein Hilfsprogramm, das der (p2f)-Installation beiliegt. Dieses Hilfsprogramm steht in der Datei mit dem Namen **p2fRemote.exe** innerhalb des Installationsverzeichnisses. Das Programm muß auf dem Rechner ausgeführt werden, auf dem der zu steuernde Client/Gateway-Service läuft. Ein Aufruf des Programms über die Kommandozeile (DOS-Box (Eingabeaufforderung)) zeigt eine kurze Beschreibung, die möglichen Parameter und ein paar beispielhafte Aufrufe an. Auch die Rückkehrwerte des Programms sind aufgelistet. p2fRemote V1.1 (c) 2009 by SPE Systemhaus GmbH Description: Allows remote control of print2forms Client/Gateway Service. Must run on the same machine as the Client/Gateway Service. Program options are: -[SsTtaq] Remote command S - Start all clients/gateways s - Start single client/gateway (-o or -n T - Terminate all clients/gateways t - Terminate single client/gateway (-o or -n) a - Abort single client/gateway (-o or -n) q - Query single client/gateway (-o or -n) -o Object id of client/gateway (incl. '.XML') -n Full name of client/gateway Return codes: 0 - Success 1 - Not all clients/gateways started 2 - Not all clients/gateways terminated Return codes for query: 100 - stopped, grey flag 101 - idle, yellow flag 102 - printing, green flag 103 - waiting on license, cyan flag 104 - waiting for printer, magenta flag 105 - special operation mode, white flag 106 - error, red flag 110 - intervention required, blue flag 111 - paper jam, blue flag 112 - load paper, blue flag 113 - toner low, blue flag 114 - cover open, blue flag 115 - offline, blue flag 116 - network lost, blue flag 117 - outbin full, blue flag Return codes in case of error: -10 - No access rights for registry -11 - Service not running -12 - Client or gateway not found -14 - Unknown program option -15 - Program option must start with a minus -16 - Can't access registry -17 - Can't start a single client or gateway -18 - Can't terminate a single client or gateway Examples: p2fRemote -s -n"Labelprinter Production" p2fRemote -t -oA$O4ER.XML p2fRemote -T p2fRemote -q -n"Systemprinter" print2forms (R) is a registered trademark of SPE Systemhaus GmbH Dieses Programm kann als Teil von Skripten und Agenten zur Remote-Steuerung aus Überwachungs- und Steuerungssystemen heraus eingesetzt werden. \\ Für Installationen, in denen keine Überwachungssoftware zur Verfügung steht, kann mit Windows Bordmitteln (nur XP, Vista, Server 2003, Server 2008) zumindest die Ereignisanzeige überwacht werden. Im Installationsverzeichnis von (p2f) befindet sich eine Datei mit dem Namen **settrigger.cmd**, die ein Befehlsskript enthält, das die Überwachung durch das Betriebssystem einrichtet. Ein Doppelklick auf die Datei führt das Skript aus. Der Befehl zum Einrichten der Überwachung lautet: eventtriggers /create /tr p2fTrigger /l application /so "p2fService" /tk "perl c:\programm\print2forms\p2fEvents.pl Alles" Der Parameter **/create** erstellt einen neuen Ereignisauslöser, der Protokollereignisse überwacht und dann den angegebenen Vorgang ausführt. Der Parameter **/tr p2fTrigger** 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 "p2fService"** 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. \\ Soll nur auf ein bestimmtes Ereignis, zum Beispiel den Start des Client/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 p2fTrigger /l application /so "p2fService" /eid 1002 /tk "perl c:\programm\print2forms\p2fEvents.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 **p2fEvents.pl** in Perl aufgeführt. Es liest die letzten zehn Ereignisse für den p2fService aus dem Ereignisprotokoll und versendet sie via EMail an den im Script eingetragenen Empfänger. #!/usr/bin/perl # Command: perl p2fEvents.pl "msg" use MIME::Lite; use Win32::EventLog; use strict; # Parameter die ggf. angepaßt 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 = 'p2fService@p2f.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 "p2fService") { 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 p2fService erzeugte Nachricht.\n" . "\nUrsprung: $Msg\n\n" . "----- Auszug aus der Ereignisanzeige für p2fService ----\n\n" . GetEvents() . "--------------------------------------------------------\n\n"; # siehe MIME::Lite Dokumentation für Schlüsselworte my $msg = MIME::Lite->new (To =>$To, From =>$From, Subject =>'p2fService 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. \\ === Hinweise === * Dieses Programm **p2fRemote** arbeitet ohne Wissen eines möglicherweise offenen Kontrollfeldes. Von daher sind können sich im Kontrollfeld recht ungewöhnliche Statusänderungen zeigen, die durch das im Hintergrund aufgerufene Programm verursacht sind. Insofern sollte man sich als Nutzer des Kontrollfeldes der Fremdsteuerung bewußt sein. * Das Programm **p2fRemote** selbst erkennt zur Zeit keine Mehrfachaufrufe. Sind mehrere Verwaltungs- oder Überwachungssysteme gleichzeitig im Einsatz, kann es zu unerwarteten Reaktionen kommen, da keine zeitliche Synchronisation beim Zugriff auf den Dienst stattfindet. Solche Fälle sollten grundsätzlich vermieden oder durch geeignete organisatorische Maßnahmen ausgeschlossen werden.