Programm restarter

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von weaver.

    Programm restarter

    Hallo zusammen,
    ich sitze hier gerade vor meinem VB und rauf mir die Haare... Ich möchte für meinem Rootserver ein Tool programmieren das mit alle XX Std. eine exe killt und neu startet. Da ich noch nicht so tief in der Materie geschaut habe bräuchte ich da mal ein bisschen Hilfe von euch ;)

    Bisher hab ich schon rausbekommen wie ich ein Prozess auslese und den "killen" kann. Was das Tool an sich soll ist, einen Gameserver überwachen. Wenn dieser kein Response mehr liefert oder crasht soll das Tool ihn neu starten. Hinzu soll noch eine Funktion kommen das der Server bzw. die *.exe alle XX Std gekillt und dann nach einer kurzen Pause neu gestartet werden soll. Ist dieses Vorhaben mit VB möglich? Was ich gefunden habe ist dieses snippet:

    Spoiler anzeigen

    Sub Restart(ByVal program As String)
    For Each proc As Process In Process.GetProcesses
    If proc.ProcessName = program Then proc.Kill()
    Next
    Process.Start(program)
    End Sub



    Danke schon mal für eure Hilfe

    gruss
    weaver
    Mit diesem Snippet wird ein Process gekillt und anschließend wieder neu gestartet.

    Dies ist eine Methode welche einen Parameter verlangt. Dieser Parameter soll das Programm sein wie es im Task-Manager angezeigt wird (jedoch ohne .exe am Ende)

    Eventuell bietet sich hier noch eine kleine Pause dazwischen an. (System.Threading.Thread.Sleep(10000) -> 10 Sekunden Pause)

    VB.NET-Quellcode

    1. Private Sub Button1_Click(byVal .....) Handles Button1.Click
    2. Restart(Dropbox) 'zB Dropbox.exe
    3. End Sub
    4. Sub Restart(ByVal program As String)
    5. For Each proc As Process In Process.GetProcesses
    6. If proc.ProcessName = program Then proc.Kill()
    7. Next
    8. System.Threading.Thread.Sleep(10000)
    9. 'Process.Start(program) ' Hier muss eigentlich der ganze Programmpfad drinstehen
    10. Process.Start("c:\Temp\Programm.exe") ' Hier muss eigentlich der ganze Programmpfad drinstehen
    11. End Sub


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Ja genau, das snippet bräuchte ich ja jetzt nur an ein Timer hängen und hatte mein Restarter der z.b. alle 6std den server neu startet. Aber ist es auch möglich das Tool dann in regelmäßigen Abständen prüfen zu lassen ob der Prozess noch aktiv ist bzw. noch reagiert und wenn das nicht eintrifft er dann auch (bei einem not Response) die exe wiederum killt und neu startet?
    Du kannst das Intervall des Timers ja nach Belieben ändern.
    Mach zB 10 Minuten daraus. und eine Variable ausserhalb welche mit nach oben gezählt wird. Würde die Variable dann 36 (nach 6 Stunden haben) soll er so oder so machen

    Bsp.:

    VB.NET-Quellcode

    1. Private _Counter as integer = 0
    2. Private Sub TimerTick(byval ......) Handles Timer1.Tick
    3. _Counter += 1
    4. if _Counter = 36 Then
    5. ' Prozess killen & neu Starten
    6. _Counter = 0
    7. End If
    8. Restart(Dropbox) ' Bei jedem Tick Normal Prüfen
    9. End Sub


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Ja das mit dem Timer hab ich schon halbwegs verstanden. Bisher klappt es auch wie ich mir das vorstelle danke schon mal. Aber da der Server auch gern mal nicht mehr reagiert sich und trotzdem als Prozess aktiv ist, kann man das auch überprüfen und ggf. killen und restarten lassen? Hatte da mal was gelesen gehabt wo jemand das mit der Powershell realisierte aber ich finde des nimmer :(
    Kommt darauf an auf was der Server nicht mehr reagiert oder ob nur dieses Programm nicht mehr reagiert.
    Ersteres könnte eventuell mit einem Ping funktionieren. Wenn dieser nichts mehr zurückgibt dann ist der Server abgekackt.

    Sonst kenn ich leider dieses Programm nicht ob man es irgendwie abfragen kann.
    Gibt dieses Programm aber nicht irgendwie eine Meldung, dass es nicht mehr funktioniert kenne ich keine Möglichkeit dies abzufragen.

    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
    Hatte es bisher nur drei mal das der Server nicht mehr reagierte. Es kommt dann ein Fenster in dem Steht das der Server nicht mehr reagiert und beendet wird. Dies muss man dann aber erst bestätigen damit der Prozess dann auch beendet wird.

    //edit:
    Habs gefunden, da hatte schon jemand was für Powershell geschrieben ob und in wieweit das in VB umsetzbar ist weiss ich leider nicht :(

    Spoiler anzeigen
    $liste = ps
    $date = date
    $reeboot = "Server hing und Prozess wurde beendet.
    IF ($liste -match "iw4mp2.exe") {
    $prozess = Get-Process Server2.exe
    If ($prozess.Responding -match "False") {
    Stop-Process -name "Server2.exe"
    "$date | $reboot" >>C:\...\Desktop\Servercrashes.log
    }
    }
    else {
    end
    }