Prüfen ob Script noch arbeitet

  • Hallo,

    bin neu hier und habe gleich mal eine Frage.

    Ich habe ein Programm erstellt, dass auf mehrere externe Programme zugreift.
    Dabei kann es vorkommen, dass eines dieser externen Programme mal aus irgendwelchen Gründen hängt.
    (Absturz Internet Explorer etc)

    Der Rechner auf dem das Programm läuft ist meist unbeaufsichtigt und ich bräuchte eine Möglichkeit um das Programm wieder zum laufen zu bekommen.

    Folgende Möglichkeiten habe ich mir überlegt.
    1. AutoIt stellt fest, dass sich seit 30 Sekunden oder so nichts getan hat bzw. das Script nicht weiter gelaufen ist.
    2. Ein 2. Script prüft regelmäßig ob das erste noch läuft und wenn nicht startet es das erste Script nochmal neu.

    Hoffe da kann mir einer helfen.

  • Das würde nur helfen wenn das Script gar nicht mehr läuft.

    Es läuft aber und bleibt nur hängen und geht nicht weiter.

    Somit existiert der Prozess.

  • Man kann dem ersten Script auch sagen es soll eine kleine datei andauernd neu schreiben mit immer anderen zeichen. (also z.B. erst eine 1 dann ein A dann 8 usw. einfach Random)
    Das so etwa alle 5sek.

    Ein 2tes Skript überprüft alle 2-3 sek ob sich was geändert hat. (Das intervall muss kleiner sein, da sonst änderungen übersprungen werden. Aber eig ist auch das egal.
    Sobalt das 2te Skript Feststellt, dass sich die Datei seit 30sek nicht verändert hat (seeehr unwahrscheinlich dass 6x hintereinander das gleiche Zeichen beim Random rauskommt. (man kann ja groß, klein - Buchstaben, sonderzeichen und Zahlen, oder einfach ne 10 Stellige Zahl nehmen. dann wiederholt sich nix) beendet es das erste und startet es neu.

    mfg
    Mars(i)

  • Die einzige Möglichkeit die mir einfällt, wäre die Tätigkeit jedes Programm einzeln zu überprüfen. Schließlich machen alle diese Programme ja verschiedene Dinge. Eine universelle Lösung fällt mir nicht ein. :S Bei einem Crash erscheint eine Windows Meldung, aber falls das Programm auf eine andere Art "hängt" ist es vermutlich nur schwer festzustellen.

  • Du könntest das eventuell lösen indem du den zustand eines Wertes im Arbeitsspeicher überprüfst der sich ständig ändert, und wenn ers nicht tut, gilt das Programm als "gestorben" ...

    Nur du musst beachten, dass ein minimiertes Spiel (z.B. GTA 4) nichtmehr aktiv läuft, wenn es minimiert ist.
    Entsprechend zählt das dann auch als gestorben ...

  • Dabei kann es vorkommen, dass eines dieser externen Programme mal aus irgendwelchen Gründen hängt.
    (Absturz Internet Explorer etc)

    • Als erstes solltest du bzw. ein Admin feststellen, warum sich externe Programme aufhängen, kommt bei mir FireFox und IE nur vor wenn INet-Störung.
    • Das Problem beseitigen

    Wenn dies nicht hilft mit IniWrite alle x Sekunden eine Lebensbestätigung (_Now) schreiben. Ein 2. Skript liest diese Lebensbestätigng immer wieder aus, falls eine Mindestzeit überschritten ist, killt es alle von deinem Skript erstellten Prozesse und das Skript nd startet es danach neu,

    mfg autoBert

  • Um Mehrfachaufrufe, die möglicherweise durch die von Marsi genannten Zufallszahlen eintreten können zu vermeiden, solltest du

    [autoit]

    _Singleton

    [/autoit]

    des Misc-Includes verwenden.
    AutoBerts Methode ist aber sicherer, da sie auf dem Datum basiert - 2x gleiches Datum kann nur dann eintreten, wenn jemand an der Systemzeit herumspielt - deswegen für Notfälle auch hier

    [autoit]

    _Singleton

    [/autoit]

    verwenden, so mein Gedanke.

  • puh danke erstmal für die ganzen antworten

    @Marsi
    werde es wohl so machen wie du gesagt hast mit einer 2. Datei die mit verschiedenen Zeichen gefüllt wird.

    autoBert
    Also das Problem warum sich der IE aufhängt kenn ich. Die Seite auf die ich Zugreife aktuallisiert sich automatisch wenn sie aktuallisiert wird gerade.
    Für den Fall das dies gerade geschieht wenn ich per IENavigate auf eine andere Seite springen will funktioniert es nicht.
    Ein anderes Problem ist bei den anderen externen Programmen. Die hängen sich teilweise auf weil die Rechner noch aus dem MIttelalter stammen :)

    Schrubber
    Mit dem neuen Tab erstellen ist gut brauch aber wieder Zeit und ich müsste ihn anschließend löschen. Wollte das Programm eher schneller als langsamer machen hehe

  • hehe

    Die Variante von AutoBert ist meiner Meinung besser als meine.
    ist ja im Prinzip das selbse, nur dass ich keine Zufallszahl, sondern das aktuelle Datum nutze.
    Das ist besser, weil so auf keinen Fall fehlerhafte Interpretation möglich ist.

    lg