PI stürzt bei häufigen

Muss ich leider bestätigen - seit heutigem UPDATE alle „HÄNGER“ wieder da :mad::mad::mad::mad:

Hätte ich mal Deinen Post vor den Updates gelesen :loveips::loveips::loveips:

@Paresy: Kann es sein, dass ein Rücksichern von …/usr/share/symcon/. nicht aureicht?? Genau dieser Fehler woanders steckt?

Ich bin wieder auf die 135 gegangen. Einfach im archives dpkg -i <paket> das vom 10.10. installieren.

Hi TomW,

DANKE. Für andere IPSler: Pfad ist: /var/cache/apt/archives.

herbertf :):):slight_smile:

Fix dafür kommt nachher. Da ist irgendwas schief gelaufen :rolleyes:

paresy

Hi Paresy,

ich bin jetzt wieder auf die „scheinbar“ funktionierende Version gewechselt.

In dieser kann ich aber auch einen Fehler reproduzieren:

IPS_SetScripttimer($_IPS['SELF'], $Delay_3);

wobei $Delay_3 ein IntegerWert (90) ist. In Script 39590 habe ich obige Zeile 21 um 10:52:19 aktiviert (bis dahin hatte ich diese Zeile auskommentiert).

Im LOG erscheint dann folgendes - nachdem ich mit sudo killall php (um 10:53:30) - die hängenden Threads gekillt habe:

Hoffentlich hilf Dir das.

HerbertF

Abend,

Das Warning Problem ist mit der heutigen Version jetzt weg. Soweit schon mal Danke!

Ich kann allerdings noch ein paar weitere Probleme sehen:

Das Setup:

Folgendes Skript:


<?
  $evID = IPS_GetEventIDByName("Off_Event", $_IPS['SELF']);
  echo "
Event ID". $evID ."
";

if ($_IPS['SENDER'] == 'Variable') {
	$evID = IPS_GetEventIDByName("Off_Event", $_IPS['SELF']);
  	echo "
Event ID". $evID ."
";

}
?>

Funktioniert einwandfrei, solang es manuell ausgeführt wird. Sobald das aber über das Event gestartet wird, kriegt das Skript keine Werte mehr für die Event ID.

Das gibt dann folgenden Fehler:

Außerdem will ich in meinem eigentlichen Skript danach das Event bearbeiten. Er findet dann aber folgende Funktion nicht:

Fatal error: Call to undefined function IPS_SetEventCyclicTimeBounds()

VG
MIchael

Hi Paresy,

im anderen „Linux-Fehler_Thread“ habe ich gelesen, dass Du an den Archiv-Fehlern arbeitest.

Hast Du denn die SetScriptTimer und Cycle-Event … Probleme aus diesem Thread auch in Arbeit?

UND ZUM SCHLUSS: ICH HABE AUF ALLEN 5 PI-SYSTEMEN SEIT TAGEN KEINEN EINZIGEN SCRIPT-Hänger (welcher ursprünglich ja mal diesen Thread verursachte)

herbert

Die habe ich leider nicht verstanden. Bist du dir sicher, dass da nicht zufällig irgendwo ein Leerzeichen am Ende im Skript die „Ausgabe“ verursacht? Hast du eine Anleitung wie ich den Fehler einwandfrei reproduzieren kann?

paresy

Hi Paresy,

scheinbar ist es doch so, dass der IPS_SetScripTimer Befehl sich in der Raspberry Version anders verhält.

Es tut mir leid, aber

IPS_SetScriptTimer(39590,25);

bringt genau obigen Fehler, nämlich sieh Anhang:

Wobei 39590.ips.php das Script und 11989 das Ereignis, also der ScriptTimer ist.

herbertf

Hallo,

seit heute habe ich wieder Script-Abstürze (reproduzierbar) mit einem modifizierten ‚Astro‘-Script. Wenn ich darin 2 eigene Ereignisse aktualisiere, läuft es, bei mehr kommt der Absturz und symcon beendet sich. Wenn ich in der Ausführung einen sleep-Befehl einbaue, bleibt das Script hängen.
Beim Absturz kommt die Meldung;socket_error.JPG

Grüße, Gerhard

Kannst du das Skript so reduzieren, dass ich es bei mir auch nachstellen könnte?

paresy

Hallo,

es handelt sich um eine variation des Astro-/Dämmerungsskrpites aus dem Forum. Ich habe es hier reduziert wie folgt:

<?php
     // Geokoordinaten des Wohnortes
  $latitude = 49.78;    // Breitengrad
  $longitude = 7.65;    // Längengrad

  $scripts   = array();
  $scripts[] = array("id" => 18473, "offset" => 0, "type" => "sunrise", "name" => "Rollo 55 auf");
  $scripts[] = array("id" => 56713 , "offset" => 0, "type" => "sunset", "name" => "Rollo 55 zu");
  $scripts[] = array("id" => 18673 , "offset" => 2, "type" => "sunrise", "name" => "Rollo + Heizung auf");
  $scripts[] = array("id" => 38307 , "offset" => 2, "type" => "sunset", "name" => "Rollo + Heizung zu");
  $scripts[] = array("id" => 10660 , "offset" => 4, "type" => "sunrise", "name" => "Rollo + Heizung auf");
  $scripts[] = array("id" => 11045 , "offset" => 4, "type" => "sunset", "name" => "Rollo + Heizung zu");

  $timestamp = time();
  $sunrise = date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90+50/60, date("O")/100);
  $sunset = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, $latitude, $longitude, 90+50/60, date("O")/100);

  SetValueString(CreateVariableByName($_IPS['SELF'], "Sonnenaufgang", 3, "~String"), date("H:i:s", $sunrise));
  SetValueString(CreateVariableByName($_IPS['SELF'], "Sonnenuntergang", 3, "~String"), date("H:i:s", $sunset));

  foreach($scripts as $num => $script)
  {
    $ts = $script['offset']*60;
    switch ($script['type'])
    {
      case "sunrise": $ts += $sunrise; break;
      case "sunset": $ts += $sunset; break;
      default: die("Ungueltiger Wert: ".$script['type']);
    }

    if(IPS_ScriptExists($script['id']))
    {
      SetTimerByName($script['id'], $script['name'], $ts);
      IPS_Sleep(500);
    }
    else
    {
      die("Skript #".$script['id']." existiert nicht!
");
    }
  }

  function SetTimerByName($id, $name, $ts)
  {
    echo $id."  ".$name."  ".$ts.PHP_EOL;
	   // existiert der event schon?
    $eid = @IPS_GetEventIDByName($name, $id);
    if($eid === false)
    {
      $eid = IPS_CreateEvent(1);    // event neu anlegen
      IPS_SetParent($eid, $id);     // eltern: übergeordnete Instanz
      IPS_SetName($eid, $name);
		IPS_SetInfo($eid, "this timer was created by script #$IPS_SELF");
      IPS_SetEventScript($eid, $id);
      IPS_SetEventActive($eid, true);
    }
    IPS_SetEventCyclic($eid, 0, 0, 0, 0, 0, 0);
    $std = intval(date("G", $ts));
    $min = intval(date("i", $ts));
	 $sec = intval(date("s", $ts));
    IPS_SetEventCyclicTimeFrom($eid, $std, $min, $sec);
	 return $eid;
  }

  function CreateVariableByName($id, $name, $type, $profile = "")
  {
    $vid = @IPS_GetVariableIDByName($name, $id);
    if($vid === false)
    {
      $vid = IPS_CreateVariable($type);
      IPS_SetParent($vid, $id);
      IPS_SetName($vid, $name);
      IPS_SetInfo($vid, "this variable was created by script #".($_IPS['SELF']));
      if($profile !== "") { IPS_SetVariableCustomProfile($vid, $profile); }
    }
    return $vid;
  }
?>

Die (test-)Skripte, die jetzt abgearbeitet werden und geänderte Ereignisse erhalten sollen, sind alle leer. Nun gibt es auch keinen Absturz mehr. Die Skripte im Original enthalten Rollo-Befehle für LCN. Ich kann mir aber nicht vorstellen, dass dies der Grund für den Absturz sein sollte. Wenn ich nur 1 Rollo abarbeite (2 Skripte), klappt es. Bei mehr als 2 Skripten kommt der Absturz.
Ich hoffe, ich habe es verständlich erklärt.

Grüße, Gerhard

Hi Paresy,

ich habe, neben den Fehlern mit den „IPS_SetScriptTimer“, jetzt auch den Effekt, dass ich mich manchmal auf dem PI per Konsole nicht anmelden kann (Snapshot konnte nicht geladen werden oder so ähnlich). Logge ich per PUTTY ein und mache ein „sudo killall php“ funktioniert es dann MANCHMAL.

herbertf

Hi Paresy,

Verhalten (beides) ist auch in der C5FAA023 von gestern noch so …

herbertf

Hallo Paresy,

gibt es keine debug-Möglichkeiten, um festzustellen, an welcher Stelle oder nach der wievielten Anweisung ein Programm hängt oder abstürzt?
Ich hatte mir zwar jede Menge print-Anweisungen gesetzt (wie ich das von anderen Sprachen kenne), aber bei PHP ist wohl alles anders…

Grüße, Gerhard

Leider nein. Dieser Fehler ist leider etwas komplizierter. Und kann prinzipiell bei jedem Befehl an IPS passieren. Hast du ein bestimmtest Skript bei dem es wirklich schnell oder sogar immer passiert?

paresy

Hi Paresy,

ich bin mit drei meiner 5 PIs jetzt auf der C5FAA023 - und zumindest meine Heizungssteuerung läuft zwar durch - hat aber mehrere hängende PHP-Threads. Komischerweise muss ich ein „sudo killall php“ mehrfach (bis zu 10*) aufrufen bis es keinen php Thread mehr findet.

Die „Vor-Vor-Letzte-Version“ - war meines Erachtens hier stabiler.

Die Scripte in meiner Heizungtssteuerung sind eigentlich banal. Gern kann ich Dir auch die settings per Mail senden.

Herbertf

Hi Paresy,

der Fehler ist immer noch da, er wirkt sich auch nicht „NUR“ im Log aus, teilweise (warum auch immer nicht immer) bleiben alle Prozesse für wenige Sekunden „hängen“.
Richtig auffällig ist dies bei „Treppenlichtschalterfunktionen“ (mit wechselnden Zeiten).

Kannst Du Dir dies bitte ansehen?

herbertf

In dem Zusammenhang mit den Problemen des IPS_SetScriptTimer kann ich auch nachvollziehen, dass mindestens 1 PHP-Thread hängen bleibt - und die interne IPS-Zeit auf dem PI bei mir UM ÜBER 60 MINUTEN nachgeht. Die Debian-Zeit (in der Konsole „Date“) ist korrekt.

Es hilft nur ein Neustart des IPS-Dienstes.

Hallo paresy,
ich weiss nicht ob das ev. Logisch ist aber ich habe mit der Ubuntu Version dieselben Probleme mit dem „IPS_SetScriptTimer“. Mindestens ein hängender php Prozess, und die IPS-Zeit, die hinterher geht und meistens hilft auch nur ein Neustart des IPS-Dienstes.
rores

Vielleicht bringt ja folgendes noch etwas zur Lösung des Problems bei:

Ich wollte wegen der IPS_SetScriptTimer Problematik zurück auf Windows migrieren und habe die settings.json und die scripts von linux zurück nach dem Windows Server kopiert. Weiss nicht ob das so gemacht werden darf? Jedenfalls hatte ich danach ein ähnliches Problem wie auf dem Linux Server. Nach dem manuellen starten dieses Scriptes:


Ist mir aufgefallen, dass sich die Laufzeit im Sekundentakt aktualisierte und nach kurzer Zeit sah es im Logfile so aus:

Den gleichen Script unter Linux manuell ausgeführt ergiebt folgende Logeinträge:

Und folgende Ausgabe auf der Konsole:

Der hängende Prozess dazu: