IPSWatchDog

AKTUELLE VERSION: 3.0.2 Basic vom 19.09.2012

Hallo ihr IPS Nutzer,

Ich habe lange verzweifelt nach einem Programm gesucht, dass mir den IPS-Server überwacht und bei Bedarf neu startet.
Zu oft passierte es bei mir, dass entweder der IPS-Server-Service ausgestiegen ist oder aber aus irgend einem Grunde keine Skripte mehr ausgeführt wurden.
Nach längerer, erfolgloser Suche beschloss ich, mir ein solches WatchDog Programm selbst zu programmieren.
Das Ergebnis ist IPSWatchDog.
Vielleicht hat ja noch jemand Verwendung dafür.

Die aktuelle Version und die Gebrauchsanleitung sind hier zu finden: IPSWatchDog

Ich stelle das Programm kostenlos zur Verfügung und übernehme keinerlei Garantie für die korrekte Funktion.
Ich garantiere nur, dass es auf der Festplatte Platz belegen wird.
Für Datenverluste oder Schäden durch das Programm übernehme ich keine Haftung.

Die Versionshistorie gibt’s entweder im Handbuch (IPSWatchDog3.pdf) oder im Online-Manual auf der
IPSWatchDog-Internetseite

Hallo Andreas,

tolle Idee! :slight_smile: Ich werde heute abend mal versuchen Deine Anleitung nachzuvollziehen und Deine Software zu installieren.

Erweiterungswunsch/Verbesserungsvorschlag von meiner Seite:
Deine Tool sollte andersherum eine Art „Log-Datei“ in das IPS-Verzeichnis schreiben, die ich dann vom IPS aus einlesen und ggf. löschen kann.
So bekomme ich mit wann und wie oft das Tool in Aktion treten musste und finde somit eventuell schneller das Problem für dieses Verhalten.
Inhalt der „Log-Datei“ könnte z.B. sein, Datum, Uhrzeit, erforderliche Aktion (Neustart IPS-Server, Reboot usw.).

Joachim

Hallo Joachim,

vielen Dank für dein Feedback zu IPSWatchDog.
Ich bin gespannt, das Programm zum Laufen bekommst und ob es das tut, was es soll. Ach ja: das Ding braucht unter Umständen Administratorrechte, sicher bin ich mir allerdings nicht. Hier läuft es auf WindowsXP und da bin ich ohnehin Administrator.

Und jetzt noch eine gute Nachricht :wink: :
Ich habe es in meiner Beschreibung nicht erwähnt aber IPSWatchDog schreibt tatsächlich ein Log (IPSWatchDog.log). Hier steht, versehen mit Datum und Uhrzeit drin, was es gerade macht.
Folgende Ereignisse werden protkolliert:

[ul]
[li]IPSWatchDog starten
[/li][li]IPSWatchDog beenden
[/li][li]Fehlermeldungen, wenn der IPS-Service nicht läuft
[/li][li]Fehlermeldungen, wenn die alive.ips Datei nicht vorhanden ist
[/li][li]Aktionen auf Fehler (Service stoppen, killen, starten, reboot)
[/li][li]Ergebnis der Aktion
[/li][/ul]
Ich muss allerdings hier noch einmal durchgehen und die Log-Kommentare verständlicher zu gestalten.

Das Log liegt im selben Verzeichnis, wie IPSWatchDog.exe, also im Wurzelverzeichnis von IPS-Symcon (Standard ist hier C:\IPS-Symcon).
PHP-Skripte schauen im Skripte-Verzeichnis von IPS (C:\IP-Symcon\scripts) nach Dateien. Wenn du also aus IPS heraus das Log auswerten willst, (gute Idee übrigens, muss ich auch mal versuchen - veröffentliche dein Skript doch mal hier), dann greife einfach auf „…\IPSWatchDog.log“ zu.

Es ist übrigens recht schwierig für mich, IPSWatchDog richtig zu debuggen.
Leider (oder zum Glück?) tritt bei mir nur noch sehr selten (alle paar Tage mal) der Fehler auf, dass der IPS-Service zwar noch läuft aber nicht mehr richtig funktioniert.
Diesen Fehler kann ich auch nicht „künstlich“ hervorrufen.
Ich bin daher auf deine (und die eines jeden anderen Nutzers) Berichte gespannt, damit ich gegebenenfalls auf Fehlersuche gehen kann.
Standardsituationen, wie Service läuft nicht oder die Kontrolldatei fehlt, kann ich manuell hervorrufen und sie sollten sauber laufen.

Cheers,

Andreas

Hallo Andreas,

sollte die IPSWatchDog.exe nicht im Autostart „erwähnt“ werden?

Weitere Verbesserungsvorschlag: Die Anwendung sollte nach der Minimierung im Systray verschwinden. (Wenn Du die Software mit VB geschrieben hast, könnte ich Dir dort noch ein paar Codeschnipsel zukommen lassen - hoffe ich zumindest:))

Bitte sende mir doch mal ein Log-Datei mit Einträgen, damit ich mal gucken kann wie die Struktur so ist (wegen Auslesen von IPS-Seite).

Joachim

Hallo Joachim,

stimmt, das mit dem Link im Autostartordner sollte sicherlich erwähnt werden, werde ich machen, sobald ich in den nächsten Tagen mal einen Moment Zeit finde.

An dem Icon im Infobereich bastle ich schon. Allerdings bin ich noch nicht zufrieden damit. Ich versuche in Delphi zu programmieren und bisher habe ich noch zwei Probleme. Das Icon erscheint zwar wunschgemäß im Infobereich, ändert aber noch nicht nach Systemzustand die Farbe. Ausserdem bleibt unter WindowsXP immer noch der Eintrag in der Taskbar bestehen (bei Windows 7 ist er dort verschwunden).
Wenn dazu jemand eine Idee hat, bin ich für Hinweise sehr dankbar.

Heute morgen hatte ich einen Serverfehler, durch den IPSWatchDog hatte aktiv werden müssen. Es war sehr erfolgreich. Leider waren zu dieser meine Loggingeinträge noch sehr unstrukturiert und ich habe das Log gelöscht. Danach habe ich das Logging überarbeitet.
Seither ist alles ruhig und ausser dem EIntrag, dass IPSWatchDog gestartet wurde, steht nichts drin.
Ich werde dir aber mal, wiederum, wenn ich in den nächsten Tagen etwas Zeit finde, die möglichen Einträge ins Log zukommen lassen.
Bitte etwas Geduld.

Grüße,

Andreas

Hallo Andreas,

ich habe schon mal in die Datei hereingeschaut.
Derzeit sieht die Aufteilung ja so aus (examplarisch):
23.04.2010-17:20:28: > IPSWatchDog GESTARTET <

Einfacher wäre die Datentrennung, bei gleichen Trennzeichen (hier z.B. „;“):
23.04.2010;17:20:28;> IPSWatchDog GESTARTET <

Dann Zeile für Zeile jeweils eine neue Meldungen.

Meine Idee:

  • In einer Variable die jeweils letzte Meldung
  • In einer Variablen alle Meldungen
  • Ein Skript zum Löschen aller Meldungen
  • (Optional?) Ein Variable zur Begrenzung der Gesamtmenge (z.B. werden nur die letzten 100 Meldungen gespeichert

Joachim

Hallo Joachim,

Das ‚;‘ habe ich eingefügt, und es gibt ohnehin immer eine Meldung pro Zeile. Hier sind mal die derzeit vorkommenden Einträge:

;> IPSWatchDog GESTARTET <
;> IPSWatchDog BEENDET <
;ERROR:CheckIPSAlive -> Server läuft, File fehlt.
;ERROR:CheckIPSAlive -> Server läuft nicht, File vorhanden.
;ERROR:CheckIPSAlive -> Server läuft nicht, File fehlt.
;ACTION:StopIPSService…
;SUCCESS:StopIPSService -> erfolgreich!
;INFO:StopIPSService -> TimeOut + Anzahl der Versuche (max 6)
;ERROR:StopIPSService -> timed out …
;ACTION:KillIPSService…
;ACTION:StartIPSService…
;SUCCESS:StartIPSService -> erfolgreich!
;INFO:StartIPSService -> TimeOut + Anzahl der Versuche (max 6)
;ERROR:StartIPSService -> timed out …’
;ACTION:Reboot Machine!

Klingt gut, ich bin gespannt auf deine Skripte :wink:

Cheers, Andreas

Hallo Andreas,

na - wenn das keine gute Zusammenarbeit ist!:wink:

Ich melde mich dann später mit einem Skript-Entwurf zurück…

Joachim

Hallo ihr,

ihr schreibt hier, das das Programm in die Autostart soll?
Wäre es nicht sinniger, dies von IPS herraus starten zu lassen?

Was passiert denn eigentlich, wenn es in der Autostart eingebunden ist und der IPS Dienst nicht gestartet werden werden, startet der Server dann wärend meines Urlaubes ein paar tausend Mal neu oder habe ich da Denkfehler.

Übrigens finde ich das Projekt echt klasse.
Ich hatte mich schon gewundert, das für den Fehlerfall hier noch nichts von IPS entwickelt worden ist.

Also, macht weiter so, ich bin gespannt auf die Weiterentwickelung.

Grüße,
Doc

Hallo Doc,

wie erkenne ich denn überhaupt (IPS-seitig) das der Server neu gestartet wurde?
Spontane Idee: weil IPS_GetUptime = aktuelles Datum/aktuelle Zeit ist? Oder gibt es ein Event woran ich erkennen kann das der Server gerade neu gestartet wurde?:confused:

Und weiter gehts: Eigentlich müsste der IPSWatchDog auf „Pause“ gesetzt werden, wenn der Server manuell gestoppt wird (ansonsten wird er immer wieder versuchen den Server zu starten). Gibt es ein Event im IPS, woran ich erkennen kann, das der Server gestoppt wurde, damit ich den WatchDog beenden kann?:confused:

Gibt also noch so einiges zu lösen, aber dafür sind wir ja da!:slight_smile:

Joachim

Hallo Dr. S.

Gute Idee. Man kann IPSWatchDog sicherlich per Skript starten.
Gibt es denn in IPS eine Möglichkeit, ein Skript nach IPS-Start auszuführen?

Hm, ja, ich denke, er würde immer und immer wieder starten. Hier wäre es sicher eine Möglichkeit, einen Zähler einzubauen, der IPSWatchDog nach einer gewissen Anzahl von Versuchen aufgeben lässt. Ich behalte das mal im Auge.

Derzeit heisst es grundsätzlich: Serverdienst geht nicht -> Es wird versucht, den Dienst zu starten -> Falls das nicht klappt, wird der Rechner neu gebootet. Und das ginge dann stundenlang so.

Danke für das Kompliment :). Ja, ich hatte mich auch schon gewundert, dass es ähnliches noch nicht gab.

Cheers,

Andreas

Hallo zusammen,

klar geht das, mache ich schon immer so.

Ihr könnt jeweils ein Script anlegen, welches bei starten und beenden von IPS ausgeführt wird. Das Shutdown-Script wird dann sicherlich bei einem Absturz nicht immer 100%ig ausgeführt aber das Startscript sollte ja immer laufen.

Dort könnte man den Watchdog einfach einbinden oder was weiss ich nicht alles mit einbinden. Bei mir werden beim starten einige Dinge geprüft und Variablen gesetzt.

Findet ihr übrigens in den Kerninstancen beim Event Handler.

Grüße,
Doc

Moin Doc,

aaah! Prima. Das werde ich mal ausprobieren.

Allerdings ist mir ein Bedenken gekommen: gesetzt dem Falle, dass beim Hochfahren des Rechners und damit IPS, der Server von IPS nicht richtig gestartet wird (kam bei mir schon zwei oder drei Male vor - warum auch immer), dann werden keine Skripte ausgeführt und somit IPSWatchDog auch nicht gestartet.
Das spräche dann wieder für die Autostartmethode.

Cheers,

Andreas

Hallo Andreas,

ich habe das ganze mal zusammen gefasst, der Übersicht halber. Mache deine Änderungen im ersten Post, dann ist alles beisammen.

Hallo Leute,

hier nun mal als Diskussiongrundlage die Erweiterung des Basisskriptes um die Funktionaliät, dass eine Variable mit der letzten Meldung, und eine mit allen Meldungen gefüllt wird (ab Version 1.0.4.!)

<?

// Dieses Skript legt eine Kontrolldatei für IPSWatchDog an.
// Es muss alle 15 Sekunden ausgeführt werden

define("DateiName", "..\alive.ips"); //Dateiname für alive Datei definieren
// normalerweise würde die Datei im Verzeichnis \IPS-SYMCON\SCRIPTS angelegt
// durch ..\ wird sie jedoch im Wurzelverchnis von IPS erstellt, also dort, wo auch ips.exe und IPSWatchDog.exe liegen

//Datei vorhanden?
$dateifehlt = !file_exists(DateiName);

//falls die Datei fehlt, neu anlegen
if ($dateifehlt) {
		$inhalt = date("d.m.y - H:i"); // Ich habe nur zu Kontrollzwecken etwas in die Datei geschrieben. Sie kann aber auch leer bleiben
		$datei = fopen(DateiName, "a");
		fwrite ($datei, $inhalt);
		fclose($datei);
		}

//LogDatei öffnen um Werte in die Variablen zu schreiben
$AlleMeldungen = 16588 /*[Sonstige Daten\IPS Watch Dog\Alle Meldungen]*/ ; //Variable Typ String, Darstellung HTML-Box
$LetzteMeldung = 53872 /*[Sonstige Daten\IPS Watch Dog\Letzte Meldung]*/ ; //Variable Typ String, Darstellung HTML-Box
$Dateipfad = IPS_GetKernelDir()."IPSWatchDog.log";

$LogText = "";
// Öffnen der Datei
$handle = fopen($Dateipfad,"r");
	// Schleife so lange durchlaufen, wie Zeilen vorhanden sind
	while ($line = fgets($handle, 1000))
   {
	$LogText = $LogText.$line;
   }

//Die erste Differenzierung nach Zeilen vornehmen
$Zeilen = explode(chr(13),$LogText);
$AnzahlZeilen = (Count($Zeilen) - 1);
$GesamtMeldung = "";

// Nun das Ergebnis Zeile für Zeile durchgehen
for($i=0; $i < $AnzahlZeilen; $i++)
{
	// Jetzt das spezifische Array aus den jeweiligen Zeilen füllen
	$Zerlegung = explode(";", $Zeilen[$i]);	//[0]-Datum, [1]-Uhrzeite, [2]-Meldungstext
	$Meldung[$i][0]=trim($Zerlegung[0]);
	$Meldung[$i][1]=trim($Zerlegung[1]);
	$Meldung[$i][2]=trim($Zerlegung[2]);
	// Den Gesamtmeldungstext zusammensetzen
	$GesamtMeldung = $GesamtMeldung."<h5>".$Meldung[$i][0]." ".$Meldung[$i][1]." ".$Meldung[$i][2]."</h5>";
	
}
// Die Anzeige nur aktualisieren, aber nur wenn sich etwas verändert hat
If ((GetValueString($AlleMeldungen)) <> ($GesamtMeldung))
{
SetValueString($AlleMeldungen, $GesamtMeldung);
SetValueString($LetzteMeldung, ("<h5>".$Meldung[$AnzahlZeilen - 1][0]." ".$Meldung[$AnzahlZeilen - 1][1]." ".$Meldung[$AnzahlZeilen - 1][2])."</h5>");
}
else
{
//echo "Keine Veränderung";
}

?>

Es gibt aber noch einige andere Baustellen die bearbeitet werden müssen…

Joachim

Hallo Andreas,

wie man des WatchDog bei Serverstart in Gang bringen könnten, ist ja weiter ober schon aufgezeigt worden.

Doch wie könnte man das Programm bei gewollten Stop des Servers wieder ausschalten? Nun, eine Möglichkeit wäre vielleicht, die Datei „Alive“ zu benutzen: Wenn der Server manuell heruntergefahren wird könnte ein IPS-Skript dort z.B. „STOP“ eintragen, der WatchDog muss dann nicht nur der Existenz der Datei schauen, sondern auch deren Inhalt lesen. Ist der Inhalt „STOP“ könnte sich der WatchDog selbst beenden.

Wäre das ein denkbarer Weg?

Joachim

Hallo Joachim,

klar, das wäre ein Weg.
Werde ich mal testen.
Jetzt kann es aber ein paar Tage dauern, da mir im Moment ein wenig die Zeit fehlt.

Grüße,

Andreas

Hallo Joachim,

nun habe ich es geschafft und IPSWatchDog dazu gebracht, auf den Server zu reagieren. Ich habe mich allerdings dagegen entschieden, Befehle in die Datei alive.ips zu schreiben und lasse vielmehr zwei neue Dateien anlegen. start.iwd beim Serverstart und stop.iwd beim Serverende. Der Inhalt ist wieder mal egal.

Hier das Start-Skript:

<?

define("StartDateiName", "..\start.iwd"); //Dateiname für Start Datei definieren
define("StopDateiName", "..\stop.iwd"); //Dateiname für Stop Datei definieren

//erst mal alle Dateileichen löschen
@unlink (StartDateiName);
@unlink (StopDateiName);

//Start Datei anlegen
$inhalt = date("d.m.y - H:i");
$datei = fopen(StartDateiName, "a");
fwrite ($datei, $inhalt);
fclose($datei);

?>

Und das Stop-Skript:

<?

define("StartDateiName", "..\start.iwd"); //Dateiname für Start Datei definieren
define("StopDateiName", "..\stop.iwd"); //Dateiname für Stop Datei definieren

//erst mal alle Dateileichen löschen
@unlink (StartDateiName);
@unlink (StopDateiName);

//Stop Datei anlgen
$inhalt = date("d.m.y - H:i");
$datei = fopen(StopDateiName, "a");
fwrite ($datei, $inhalt);
fclose($datei);

?>

Das läuft bei mir sehr gut.

Cheers,

Andreas

PS: ach ja, IPSWatchDog beendet sich nicht, wenn es den Stop Befehl bekommt, sondern wartet darauf, dass es wieder einen Start Befehl bekommt.

Hallo Andreas,

wie triggerst Du denn die Skripte?

Joachim

Ich habe sie in die Kerninstanzen in den Eventhandler eingetragen.