Dienste überwachen

  • Hallo zusammen.

    Ich habe ein Anliegen was ich eigentlich mit einer Batch-Datei lösen wollten, aber mit Batch kenne ich mich nochweniger aus als mit AutoIT.
    Mein Anliegen:
    1. alle 15 Minuten überprüfen, ob Dienst "1DIENST" läuft
    wenn nicht dann:
    2. prüfen ob Dienst "DIENST2" läuft
    2.1 wenn ja, dann Dienst "1DIENST" starten und Erfolgsmeldung A (MSGBOX)
    2.2 wenn nicht, dann Dienst "DIENST2" starten
    3 Start von Dienst "DIENST2" erfolgreich?
    3.1 wenn ja, dann Dienst "1DIENST" starten und Erfolgsmeldung B (MSGBOX)
    3.2 wenn nein, dann Fehlermeldung C (MSGBOX)

    Hinweise
    zur Lösung reichen mir bereits. :)

    Danke!

    Einmal editiert, zuletzt von Xethria (22. September 2010 um 10:22)

  • So?:

    Spoiler anzeigen
    [autoit]


    AdlibRegister("search", 15 * 1000 * 60)

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

    While 1

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

    WEnd

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

    Func search()

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

    If Not ProcessExists("Dienst1") Then
    If ProcessExists("Dienst2") Then
    Run("Dienst1")
    MsgBox(0, "", "") ;wenn dienst 1 gestartet wurde MessageboxA
    Else
    Run("Dienst2")
    Sleep(5000)
    If ProcessExists("Dienst2") Then
    Run("Dienst1")
    msgBox(0, "", "") ;wenn dienst 2 gestartet wurde Messagebox B
    Else
    MsgBox(0, "", "") ;wen nein MessageBox C
    EndIf

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

    EndIf
    EndIf

    [/autoit]


    Ungetestet

    Einmal editiert, zuletzt von stayawayknight (26. Juli 2010 um 17:19)

  • AdlibRegister("search", 15 * 60 * 60)
    Kannte ich noch nicht.
    Ich bastel mal und melde mich bei Fehlern. Danke!

    [EDIT]
    Ich habe hier zum Beispiel den Dienst:
    Dienstname: MSSQLSERVER
    Pfad zur EXE: "C:\Programme\...\sqlservr.exe" -sMSSQLSERVER

    Nehm ich dann:
    ShellExecute("C:\Programme\...\sqlservr.exe", -sMSSQLSERVER)
    ?

    Einmal editiert, zuletzt von Xethria (26. Juli 2010 um 16:25)

  • Ich habe mich für sleep entschieden, weil die Auslastung sonst 100% war:

    While $a>1
    sleep(1000*4)
    _Dienst()
    WEnd

    Mein Script, aber noch ohne Ausführen:

    Spoiler anzeigen
    [autoit]

    FileDelete(@DesktopDir & "\CentronLOG.LOG")
    ;15 Min. * 4 = 1 Std.
    ;1 Std. * 9 = 9 Std.

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

    ;$a - 1 = Durchläufe
    $a=10

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

    While $a>1
    ;15 Min schlafen
    sleep(1000*60*15)
    _Dienst()
    WEnd

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

    Func _Dienst()
    $logfile = FileOpen(@DesktopDir & "\CentronLOG.LOG", 9)
    $zeit = @HOUR & ":" & @MIN & ":" & @SEC
    $Datum = @MDAY & "." & @MON & "." & @YEAR & " | "
    If NOT ProcessExists("CentronSRV.exe") Then
    FileWriteLine($logfile, $Datum & $zeit & " | ERROR 1 | Läuft nicht: CentronSRV.exe")

    If Not ProcessExists("sqlservr.exe") Then
    FileWriteLine($logfile, $Datum & $zeit & " | ERROR 2 | Läuft nicht: sqlservr.exe")
    ; ShellExecute("sqlservr.exe")
    FileWriteLine($logfile, $Datum & $zeit & " | TRY 2 | Wird gestartet: sqlservr.exe")

    If Not ProcessExists("sqlservr.exe") Then
    FileWriteLine($logfile, $Datum & $zeit & " | ERROR 3 | Konnte nicht gestartet werden: sqlservr.exe")
    ;=> 1 Mail an Admin
    Else
    FileWriteLine($logfile, $Datum & $zeit & " | SUCCESS 3 | Konnte gestartet werden: sqlservr.exe")
    ; ShellExecute("CentronSRV.exe")
    FileWriteLine($logfile, $Datum & $zeit & " | TRY 3 | Wird gestartet: CentronSRV.exe")

    If NOT ProcessExists("CentronSRV.exe") Then
    FileWriteLine($logfile, $Datum & $zeit & " | ERROR 4 | Konnte nicht gestartet werden: CentronSRV.exe")
    ;=> 2 Mail an Admin
    Else
    FileWriteLine($logfile, $Datum & $zeit & " | SUCCESS 4 | Konnte gestartet werden: CentronSRV.exe")
    EndIf
    EndIF
    Else
    FileWriteLine($logfile, $Datum & $zeit & " | SUCCESS 2 | Wird ausgeführt: sqlservr.exe")
    ; ShellExecute("CentronSRV.exe")
    FileWriteLine($logfile, $Datum & $zeit & " | TRY 1 | Wird gestartet: CentronSRV.exe")
    EndIf
    Else
    FileWriteLine($logfile, $Datum & $zeit & "| SUCCESS 1 | Wird ausgeführt: CentronSRV.exe")
    EndIf
    FileWriteLine($logfile, " ")
    FileClose($logfile)
    $a=$a-1
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von Xethria (26. Juli 2010 um 18:09)


  • Das hatte ich mir bereits gedacht, aber was ist die Antwort auf den Parameter? Ich kann es nicht einfach testen, da e ein SRV ist, der betrieben wird. Gebe ich das so an:
    ShellExecute("C:\Programme\...\sqlservr.exe", "sMSSQLSERVER") ?
    Natürlich den Pfad ausgeschrieben, habe ihn nur aus Faulheit gekürzt.

  • schau dir doch mal die services.au3 an. dann brauchste nicht mit shellexecute zu hantieren.


    Verrätst du mir bitte noch von welcher "services.au3 " du sprichst und wo diese sich befindet?

    [EDIT]
    hab die gefunden:
    http://www.autoitscript.com/forum/index.php?showtopic=42443
    Liest sich gut, schau ich mir mal an.
    Function List

    Spoiler anzeigen


    ; _Service_Create()
    ; _Service_Delete()
    ; _Service_EnumAnticede()
    ; _Service_EnumDepends()
    ; _Service_Exists()
    ; _Service_GetDescription()
    ; _Service_GetDetails()
    ; _Service_GetFilePath()
    ; _Service_GetPid()
    ; _Service_GetStartMode()
    ; _Service_GetState()
    ; _Service_Pause()
    ; _Service_PauseOK()
    ; _Service_Resume()
    ; _Service_Running()
    ; _Service_SetStartMode()
    ; _Service_Start()
    ; _Service_StartType()
    ; _Service_Stop()
    ; _Service_StopOK()
    ; _Services_GetDetails()
    ; _Services_List_FromPID()
    ; _Services_ListInstalled()
    ; _Services_ListRunning()

    Einmal editiert, zuletzt von Xethria (27. Juli 2010 um 11:51)