Script-Fehler

Moin,
ich habe vorhin ein Script gestartet welches per RunScript ein anderes Script startet. Es lief nicht wie gewünscht. Ich habe alles per Script nach Defekten durchsuchen lassen aber nichts gefunden. Im LogFile fand ich den Grund: Die Ziel-ID von RunScript gab es nicht mehr.

Könnte man in diesem Fall das Script als defekt markieren damit man es mit einer automatischen Prüfroutine finden kann und benachrichtigt wird?

Ralf

IPS_RunScript wirft eine PHP Warnig aus. Alle diese Warnings kannst Du in einer log Datei ablegen lassen und parsen.
Das mache ich über ein spezielles Auswerte-Script.
Wichtig ist, das in der PHP ini das Error Log aktiviert ist, z.B.:

log_errors = on
error_log=C:\ProgramData\Symcon\logs\error.log

Hi,
ich schaue jeden Morgen mal im IPS Log nach und so finde ich die Fehler auch. Schöner und konsistenter wäre aber das Script als fehlerhaft zu markieren finde ich.

Ralf

Da muss man differenzieren, ob es eine Warning ist oder ein Error.

Bei einer Warning wird das aufrufende Skript ja weiter ausgeführt. Da kann und sollte es nicht als fehlerhaft markiert werden. Anders ist es beim Error. Da wird das Skript abgebrochen und auch von Symcon als fehlerhaft markiert.

Du könntest den Rückgabewert der Funktion auswerten und ein trigger_error () aufrufen.

Hi,
Ein Script, das man aufrufen möchte und möglicherweise wichtig für den Rest ist, aber nicht vorhanden ist wäre für mich eindeutig ein Fehler und der Rest des aufrufenden Scriptes dürfte nicht mehr ausgeführt werden und sollte markiert werden.

Das selbe würde meiner Ansicht nach auch für GetValue, und vielleicht andere Befehle, gelten denn sonst würden die Scripte zu 50% aus Abfangen von Warnungen bestehen.

Ralf

Wie gesagt, IPS_RunScript hat einen Boolean Rückgabewert der aussagt, ob die Ausführung erfolgreich war oder nicht.
Das ist bei vielen IPS Funktionen und auch bei vielen PHP Funktionen so.
Wenn es für deinen weiteren Ablauf wichtig ist, solltest du den Rückgabewert auswerten.

Anders ist es bei GetValue. Die Funktion wirft einen Fehler, wenn es die Variable nicht gibt.
Dann wird das Skript auch als fehlerhaft dargestellt.

IPS_RunScript ist außerdem bei der Ausführung nebenläufig, also stößt das Skript sozusagen an und macht dann weiter ohne auf die gesamte Ausführung zu warten. Daher ist es gar nicht möglich im ursprünglichen Skript auf die Rückgabe des Skriptes zu reagieren. Wenn du das tun möchtest, bräuchtest du IPS_RunScriptWait

Ist zwar schon ein alter Beitrag, sollte aber grundsätzlich passen.
https://community.symcon.de/t/hilfe-zur-fehlerbehandlung/19918

Hi Dr.Niels,
DAS war ja nicht mein Problem sondern das bei IPS_RunScript(1234) das Script nicht mehr existiert. Ich möchte keinen Rückgabewert vom Script bekommen. Ich bin der Meinung das ein nicht ausgeführtes, weil fehlendes, Script eher ein Fehler statt eine Warnung verdient.

@Ferengi-Master,
was wäre ein Workaround. Ich werde es mal überlegen wenn es wieder vorkommt.

Ralf

Wenn die übergebene ID gar nicht existiert, ist es durchaus überlegenswert, einen Fehler statt einer Warnung zu werfen. Es wäre dann aber nicht mehr kompatibel.

Beispiel:

if (@IPS_RunSkript('47111'){
  echo "Das Skript wurde gestartet";
} else {
  echo "Das Skript wurde nicht gestartet";
}

Das Skript würde dann nicht mehr laufen, wenn die ID nicht existiert.

Burkhard

Hi bumaas,
das müsste man dann aber bei allen Fällen machen. Ich weiß ja vorher nicht unbedingt wo ich es brauche. Ich könnte natürlich eine Wrapper-Funktion für mich schreiben und die dann statt IPS_RunScript benutzen. Ich hatte sowieso schon länger vor mir eine Datei mit oft gebrauchten Scripten zu erstellen und die zu includen.

Fehler könnte ich regelmäßig per Script überwachen und aktiv drauf reagieren wie ich es jetzt auch schon mache.

Ralf