24/7 Überwachungsskript soll sich selbst neustarten

  • Hallo Zusammen,

    für einen Rechner habe ich ein Überwachungsskript im Hintergrund welches verschiedene Funktionen im Hintergrund erfüllt. Soweit läuft das auch. Nun ist es aber so dass der Rechner fast nie neu gestartet sondern meist nur in den Standby geschickt wird (oder Ruhezustand). D.H. Auch nach dem Standby läuft das Skript weiter und tut seine Arbeit.

    Eigentlich hatte ich gar nicht damit gerechnet dass es nach dem Standby so unproblematisch weiter läuft aber bisher tut es das ganz gut. Trotzdem möchte ich es nach einem Standby neu Starten damit Speicher etc. jedenfalls keine Probleme machen. Dazu 2 Fragen.

    1) Soll ich dies überhaupt machen (bisher traten ja noch keine Fehler auf) oder würded ihr nach dem Standby ein kurzes Beenden und neustarten ausführen
    2) Falls Neugestartet werden soll würde mich interessieren wie man das am geschicktesten macht. Ginge z.B. über ein temporärers zweites Skript aber das finde ich nicht besonders gut. Einen Trigger nach dem Standby hätte ich, beenden wäre auch kein Problem aber neustart?

    Danke und Grüße

    Alex

  • [autoit]


    if not FileExists(@ScriptDir & "\test.ini")then
    IniWrite(@ScriptDir & "\test.ini", "test", "state", 0)
    endif
    global $1 = IniRead(@ScriptDir & "\test.ini", "test", "state","")
    IniWrite(@ScriptDir & "\test.ini", "test", "state", 0)

    [/autoit][autoit][/autoit][autoit]

    OnAutoItExitRegister("_Restart")
    HotKeySet("{ESC}", "_exit")

    [/autoit][autoit][/autoit][autoit]

    while 1
    Sleep(100)
    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    func _exit()
    Exit
    endfunc

    [/autoit][autoit][/autoit][autoit]

    func _Restart()

    if $1 = 0 Then
    MsgBox(1, "", "testbox")
    ShellExecute(@ScriptDir & "\test.exe")
    IniWrite(@ScriptDir & "\test.ini", "test", "state", 1)
    EndIf
    endfunc

    [/autoit]


    Geht auch mit einem Skript. ;)

  • Ich hätte da auch mal eine Frage. Wenn du jetzt ESC drückst und damit die Funktion _exit() startest, springt der dann bei dem Befehl Exit zu der Funktion _Restart()?

  • warum mit externen sachen machen wenn auch intern geht

    Weil das Skript vielleicht nicht 2 mal laufen darf? Wenn das mit _Singleton verhindert wird, dann hilft dir auch dein "interner" restarter nix.
    Der Vorteil an einer externen Batch liegt hierbei daran, dass sie vollkommen unproblematisch arbeiten kann und einfach wartet bis das Script beendet ist, um dann eine neue Instanz zu starten. Danach löscht sich die Batch datei von selbst. Übrigens eine Fähigkeit die du , soweit ich weiß, in kaum einer anderen Programmiersprache findest. Batch dateien können sich selbst löschen.

  • Weil das Skript vielleicht nicht 2 mal laufen darf? Wenn das mit _Singleton verhindert wird, dann hilft dir auch dein "interner" restarter nix.
    Der Vorteil an einer externen Batch liegt hierbei daran, dass sie vollkommen unproblematisch arbeiten kann und einfach wartet bis das Script beendet ist, um dann eine neue Instanz zu starten. Danach löscht sich die Batch datei von selbst. Übrigens eine Fähigkeit die du , soweit ich weiß, in kaum einer anderen Programmiersprache findest. Batch dateien können sich selbst löschen.

    auch wieder wahr :D

  • Das geht schon ;)

    Spoiler anzeigen
    [autoit]


    #include <Misc.au3>
    global $titel = "test"
    if _Singleton($titel,1) = 0 then exit

    [/autoit] [autoit][/autoit] [autoit]

    if not FileExists(@ScriptDir & "\test.ini")then
    IniWrite(@ScriptDir & "\test.ini", "test", "state", 0)
    endif
    global $1 = IniRead(@ScriptDir & "\test.ini", "test", "state","")
    IniWrite(@ScriptDir & "\test.ini", "test", "state", 0)

    [/autoit] [autoit][/autoit] [autoit]

    OnAutoItExitRegister("_Restart")
    HotKeySet("{ESC}", "_exit")

    [/autoit] [autoit][/autoit] [autoit]

    while 1
    Sleep(100)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    func _exit()
    Exit
    endfunc

    [/autoit] [autoit][/autoit] [autoit]

    func _Restart()

    if $1 = 0 Then
    MsgBox(1, "", "testbox")
    ShellExecute(@ScriptDir & "\test.exe")
    IniWrite(@ScriptDir & "\test.ini", "test", "state", 1)
    EndIf
    endfunc

    [/autoit]