Zugriff auf IPS-Meldungen/Log von Script

Mein IPS meldet sich alle paar Tage unkontrolliert ab mit einem Out of Memory. Diese Probleme kündigen sich langsam an und so würde ich gerne die erste Out of Memory Meldung abfangen und neu starten (natürlich keine saubere Lösung aber ich finde seit Monaten das eigentliche Problem nicht). Kann ich die Meldungen (ausser Log-File auswerten - nicht sehr schön) direkt in einem Script auswerten?

Danke und happy new year, kjb

Das ist wie wenn du deinem eigenen Schatten hinterher rennst.
Es ist doch keine Lösung den IPS-Server ständig neu zu starten!
Wer wird damit glücklich?

Beschäftige dich mit der Programmierung.
Sicher ist es nur ein kleiner Fehler in irgendeinem Script… beobachte diese und stecke nicht den Kopf in den Sand.
Die von dir gefragte Lösung hilft niemand hier aus dem Forum weiter, weil jeder eine funktionierende Hausautomatisierung anstrebt… außer er spielt nur. Deshalb gibt es auch noch keine Antworten…

Langsam ansteigender Speicherverbrauch mit daraus resultierendem

Out of Memory

liegt zu 99,9% an einem Scriptfehler bei Dateioperationen, z.B. fopen, die nicht ordentlich beendet werden (fclose).

Dadurch wird ein Handle geöffnet und nicht wieder geschlossen, der Speicher wird dann nicht wieder freigegeben.

:o Natürlich habt Ihr recht aber meine geplante Übergangslösung ist immer noch besser als gar keine…

Habe nochmals mit TextCrawler alle 317 Scripte nach ‚fopen‘ durchsucht und es sind alle korrekt geschlossen mit ‚fclose‘. Ansonsten mache ich (vermutlich) nichts mit Files. Ich greife extensiv per SOAP auf IPS zu, weil meine Visualisierung/Mediensteuerung (noch) nicht IPS ist. Nur da finde ich auch nichts. Noch Ein Tipp, wie man das Problem endlich mal eingrenzen könnte?

Dennoch soweit mal danke für die klaren Aussagen.

kjb

Beim letzten ‚Out of Memory‘ steht folgendes im Log:

30.12.2013 19:48:15.502 | 0 | ERROR | KernelMT | Error on process message SE_RUNNING, Sender 48540: Out of memory
30.12.2013 19:48:15.502 | 0 | ERROR | KernelMT | Error on process message EM_UPDATE, Sender 18692: Out of memory

Das zugehörige Script (48540):

if (Sys_Ping("10.10.11.44", 200) == True)
{
	$xmlResult = new SimpleXMLElement(file_get_contents("http://10.10.11.44/web/powerstate?"));
	if (substr($xmlResult->e2instandby,0,4) == 'true')
	{
	   SetValue(39335 /*[Hardware - Multimedia\Dreambox\Power]*/, "Standby");
	}
	else
	{
	   SetValue(39335 /*[Hardware - Multimedia\Dreambox\Power]*/, "Ein");
  		$xmlResult = new SimpleXMLElement(file_get_contents("http://10.10.11.44/web/subservices"));
      $result = $xmlResult->e2service[0]->e2servicename;
      $servicereference = $xmlResult->e2service[0]->e2servicereference;
		SetValue(37541 /*[Hardware - Multimedia\Dreambox\Channel]*/, "$result");
	}
}
if (Sys_Ping("10.10.11.44", 200) == False) SetValue(39335 /*[Hardware - Multimedia\Dreambox\Power]*/, "Aus");

Dabei wird die Dreambox nach dem Einschaltzustand abgefragt. file_get_contents ist grundsätzlich sicher nicht ganz harmlos weil der ganze File-Inhalt in den Speicher geladen wird. Die Antwort der Dreambox ist aber sehr kurz:

<?xml version="1.0" encoding="UTF-8"?>
<e2powerstate>
	<e2instandby>true</e2instandby>
</e2powerstate>

Ist in dem Script ein Fehler? Keine Handles, welche geschlossen werden müssten oder irre ich mich?

Danke für die Hilfe, kjb

Was mir auf die Schnelle auffällt, dass die Variable in Anführungszeichen steht…

SetValue(37541 /*[Hardware - Multimedia\Dreambox\Channel]*/, "$result");