Server Restart Script

  • Hallo zusammen,

    ich hoste mehrere DayZ Server (Mod von Arma 2) und habe mir ein Autoit Script geschrieben was diese zu bestimmten Zeiten restarten soll. Dafür habe ich mir hier aus verschiedenen Threads zusammengesucht was ich so brauchte. Es sieht jetzt so aus:

    Spoiler anzeigen
    [autoit]

    While 1 $sTime = _Time(2) & ":" & @SEC Select Case $sTime = "02:00:00" _restart3() Case $sTime = "04:00:00" _restart2() Case $sTime = "06:00:00" _restart1() Case $sTime = "08:00:00" _restart3() Case $sTime = "10:00:00" _restart2() Case $sTime = "12:00:00" _restart1() Case $sTime = "14:00:00" _restart3() Case $sTime = "16:00:00" _restart2() Case $sTime = "18:00:00" _restart1() Case $sTime = "20:00:00" _restart3() Case $sTime = "22:00:00" _restart2() Case $sTime = "00:00:00" _restart1() EndSelect Sleep(50)WEnd
    Func _Time($pre) If $pre = 1 Then Return @HOUR ElseIf $pre = 2 Then Return @HOUR & ":" & @MIN ElseIf $pre = 3 Then Return @Hour & ":" & @Min & ":" & @SEC EndIfEndFunc ;==>_Time($pre)
    Func _restart1() ToolTip("Sons Of Anarchy #1 wird neugestartet", 0, 0) Sleep(2000) ; Sleep to give tooltip time to display WinClose("ArmA 2 OA Console version 1.62 : port 2302", "") Sleep (30000) Run("C:\SERVER\DE 2471\arma 2 operation arrowhead\DE 2471.bat", "")EndFunc
    Func _restart2() ToolTip("Sons Of Anarchy #2 wird neugestartet", 0, 0) Sleep(2000) ; Sleep to give tooltip time to display WinClose("ArmA 2 OA Console version 1.62 : port 2308", "") Sleep (30000) Run("C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #2 Chernarus Server\dayz_server.bat", "")EndFunc
    Func _restart3() ToolTip("Sons Of Anarchy #3 wird neugestartet", 0, 0) Sleep(2000) ; Sleep to give tooltip time to display WinClose("ArmA 2 OA Console version 1.62 : port 2309", "") Sleep (30000) Run("C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #3 Lingor Island Server\dayz_lingor_server.bat", "")EndFunc

    [/autoit]

    Könnt ihr dort einen Fehler finden?

    Mein Problem dabei ist nämlich folgendes:

    Da es mehrere Server sind die über eine gleichnamige .exe laufen muss ich die Serverfenster per Fensternamen killen. Die .bat startet jeweils den Server, dabei wird die MySql Datenbank gestartet und der Server an sich.

    Nehme ich nur diesen Script Fetzen

    [autoit]

    WinClose("ArmA 2 OA Console version 1.62 : port 2309", "") Sleep (30000) Run("C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #3 Lingor Island Server\dayz_lingor_server.bat", "")

    [/autoit]


    Funktioniert der manuelle restart per Autoit Script. Wenn ich das gesamte Script nutze, bekomme ich immer folgende Fehlermeldung:

    [Blockierte Grafik: http://i50.tinypic.com/dm8r4y.png]


    Die .bat sieht übrigens so aus falls es notwendig ist:

    Spoiler anzeigen
    Code
    @echo off@start server_setup\xampp\mysql\bin\mysqld.exe --defaults-file=server_setup\xampp\mysql\bin\my.iniclsecho "Please wait...Loading"ping -n 10 127.0.0.1>nulserver_setup\perl\bin\perl -w vehicles.pl --cleanup --world chernarus 1 dayz MYSQLID MYSQLPWstart BEC\Runmecls"Expansion\beta\arma2oaserver.exe" -port=2308 "-config=Saintly\config.cfg" "-cfg=Saintly\basic.cfg" "-profiles=Saintly" -name=Saintly "-mod=@DayZ;@Saintly;" -cpuCount=4 -maxMem=1578 -exThreads=7cd server_setup\xampp & mysql_stop.bat


    Die .bat und alles andere funktioniert wie gesagt wenn ich per Script fetzen manuell restarte oder selbst per Hand das Fenster schließe und die .bat starte wunderbar. Nur mit dem großen Script oben nicht. Ich hoffe jemand hat eine Idee!

    Vielen Dank im Voraus

    Mfg kikyou2

    Edit:

    Es funktioniert mittlerweile und ich möchte euch die Lösung nicht vorenthalten ;)

    In der .bat musste noch

    Code
    CD "Pfad des Verzeichnisses von der bat"


    eingetragen werden damit er die Verzeichnisse richtig findet. Jetzt klappt alles wunderbar!

    -----------------

    Hat sonst evtl. noch jemand Verbesserungsvorschläge für das Script?

    Einmal editiert, zuletzt von kikyou2 (1. Oktober 2012 um 16:19)

  • Neues Problem:

    Neuerdings startet das Script nicht mehr die Server neu. Nur _restart1 schafft es noch die .bat zu starten alle anderen killen nur die Fenster. Die Verzeichnisse oder die .bat Namen haben sich nicht geändert und ich habe das schon 10x überprüft.

    Hat irgendjemand eine Ahnung woran es liegen könnte?

    Spoiler anzeigen
    [autoit]

    #RequireAdmin

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

    While 1
    $sTime = _Time(2) & ":" & @SEC
    Select
    Case $sTime = "01:00:00"
    _restart4()
    Case $sTime = "02:00:00"
    _restart2()
    Case $sTime = "03:00:00"
    _restart3()
    Case $sTime = "04:00:00"
    _restart1()
    Case $sTime = "05:00:00"
    _restart4()
    Case $sTime = "06:00:00"
    _restart2()
    Case $sTime = "07:00:00"
    _restart3()
    Case $sTime = "08:00:00"
    _restart1()
    Case $sTime = "09:00:00"
    _restart4()
    Case $sTime = "10:00:00"
    _restart2()
    Case $sTime = "11:00:00"
    _restart3()
    Case $sTime = "12:00:00"
    _restart1()
    Case $sTime = "13:00:00"
    _restart4()
    Case $sTime = "14:00:00"
    _restart2()
    Case $sTime = "15:00:00"
    _restart3()
    Case $sTime = "16:00:00"
    _restart1()
    Case $sTime = "17:00:00"
    _restart4()
    Case $sTime = "18:00:00"
    _restart2()
    Case $sTime = "19:00:00"
    _restart3()
    Case $sTime = "20:00:00"
    _restart1()
    Case $sTime = "21:00:00"
    _restart4()
    Case $sTime = "22:00:00"
    _restart2()
    Case $sTime = "23:00:00"
    _restart3()
    Case $sTime = "00:00:00"
    _restart1()
    EndSelect
    Sleep(50)
    WEnd

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

    Func _Time($pre)
    If $pre = 1 Then
    Return @HOUR
    ElseIf $pre = 2 Then
    Return @HOUR & ":" & @MIN
    ElseIf $pre = 3 Then
    Return @Hour & ":" & @Min & ":" & @SEC
    EndIf
    EndFunc ;==>_Time($pre)

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

    Func _restart1()
    WinClose("ArmA 2 OA Console version 1.62 : port 2302", "")
    Sleep (60000)
    Run("C:\SERVER\DE 2471\arma 2 operation arrowhead\DE 2471.bat", "")
    EndFunc

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

    Func _restart2()
    WinClose("ArmA 2 OA Console version 1.62 : port 2308", "")
    Sleep (60000)
    Run("C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #2 Chernarus Server\dayz_server.bat", "")
    EndFunc

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

    Func _restart3()
    TrayTip("Neustart", "Sons of Anarchy #3 wird neugestartet", 5, 1)
    WinClose("ArmA 2 OA Console version 1.62 : port 2309", "")
    Sleep (60000)
    Run("C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #3 Lingor Island Server\dayz_lingor_server.bat", "")
    EndFunc

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

    Func _restart4()
    WinClose("ArmA 2 OA Console version 1.62 : port 2322", "")
    Sleep (60000)
    Run("C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #4 1.7.2.6.1\dayz_server.bat", "")
    EndFunc

    [/autoit]

    Einmal editiert, zuletzt von kikyou2 (6. Oktober 2012 um 02:59)

  • Script
    [autoit]

    #RequireAdmin

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

    Global $aBat[4][2] = [["C:\SERVER\DE 2471\arma 2 operation arrowhead\", "DE 2471.bat"],["C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #2 Chernarus Server\", "dayz_server.bat"], _
    ["C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #3 Lingor Island Server\", "dayz_lingor_server.bat"],["C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #4 1.7.2.6.1\", "dayz_server.bat"]]
    Global $aPorts[5] = ["2302", "2308", "2309", "2322"], $iSleep = 60000

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

    While 1
    $sTime = _Time(3)
    Select
    Case $sTime = "01:00:00"
    _restart(4)
    ;If @error then Msgbox(64,"Fehlermeldung","Fehler beim Starten des Servers: " & @error & @LF & $sTime)
    Case $sTime = "02:00:00"
    _restart(2)
    Case $sTime = "03:00:00"
    _restart(3)
    Case $sTime = "04:00:00"
    _restart(1)
    Case $sTime = "05:00:00"
    _restart(4)
    Case $sTime = "06:00:00"
    _restart(2)
    Case $sTime = "07:00:00"
    _restart(3)
    Case $sTime = "08:00:00"
    _restart(1)
    Case $sTime = "09:00:00"
    _restart(4)
    Case $sTime = "10:00:00"
    _restart(2)
    Case $sTime = "11:00:00"
    _restart(3)
    Case $sTime = "12:00:00"
    _restart(1)
    Case $sTime = "13:00:00"
    _restart(4)
    Case $sTime = "14:00:00"
    _restart(2)
    Case $sTime = "15:00:00"
    _restart(3)
    Case $sTime = "16:00:00"
    _restart(1)
    Case $sTime = "17:00:00"
    _restart(4)
    Case $sTime = "18:00:00"
    _restart(2)
    Case $sTime = "19:00:00"
    _restart(3)
    Case $sTime = "20:00:00"
    _restart(1)
    Case $sTime = "21:00:00"
    _restart(4)
    Case $sTime = "22:00:00"
    _restart(2)
    Case $sTime = "23:00:00"
    _restart(3)
    Case $sTime = "00:00:00"
    _restart(1)
    EndSelect
    Sleep(50)
    WEnd

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

    Func _Time($pre)
    If $pre = 1 Then
    Return @HOUR
    ElseIf $pre = 2 Then
    Return @HOUR & ":" & @MIN
    ElseIf $pre = 3 Then
    Return @HOUR & ":" & @MIN & ":" & @SEC
    EndIf
    EndFunc ;==>_Time

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

    Func _restart($iServer)
    If Not WinExists("ArmA 2 OA Console version 1.62 : port " & $aPorts[$iServer - 1]) Then SetError(1, 1)
    WinClose("ArmA 2 OA Console version 1.62 : port " & $aPorts[$iServer - 1])
    Sleep($iSleep)
    ShellExecute($aBat[$iServer - 1][1], "", $aBat[$iServer - 1][0])
    If @error Then SetError(2, 2)
    EndFunc ;==>_restart

    [/autoit]

    Habe das Script mal ein bisschen optimiert und hoffe, dass es nun funktioniert.
    Falls noch fehler im Script sind, sag bescheid.

    // Es könnte an Run("") liegen, probier es mal mit Shellexecute("","","") (siehe oberes Script)

    PS: Benutze bitte das nächste mal einen Spoiler für deinen Code ;)

    Edit:/ Habe das Script nochmal ein bisschen umgeräumt,
    sprich ich habe statt H : M : S nurnoch H:M abgefragt,
    denn die Sekunden sind an sich egal.

    3 Mal editiert, zuletzt von Njahs (6. Oktober 2012 um 17:03)

  • Vielen Dank fürs optimieren ich probier es gleich mal aus! Hach, es wäre so schön wenn es jetzt sauber funktionieren würde :)

    Und ich habs gleich editiert wegen dem Spoiler, sorry hab ich vergessen!

    Ich meld mich dann nochmal ob es funktioniert oder nicht ;)

  • Das Script funktioniert jetzt! Vielen Dank :)

    Die Sekunden habe ich eingefügt weil ich mir nicht sicher war wenn ich die Sekunden weg lasse ob er dann nicht wie folgt handelt:

    Wenn 02:00 ist dann restart

    02:00:01 restart 02:00:02 restart usw

    Ich hoffe man versteht was ich meine.

  • Das Script funktioniert jetzt! Vielen Dank :)

    Die Sekunden habe ich eingefügt weil ich mir nicht sicher war wenn ich die Sekunden weg lasse ob er dann nicht wie folgt handelt:

    Wenn 02:00 ist dann restart

    02:00:01 restart 02:00:02 restart usw

    Ich hoffe man versteht was ich meine.

    Freut mich ^^
    Hast recht, war ein fail von mir.

  • Auch wenn das Problem jetzt schon gelöst ist, wollte ich euch nur mal darauf aufmerksam machen, dass sich das Script nochmal um 75% kürzen lässt:

    Spoiler anzeigen
    [autoit]

    #RequireAdmin
    Global $aBat[4][2] = [["C:\SERVER\DE 2471\arma 2 operation arrowhead\", "DE 2471.bat"],["C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #2 Chernarus Server\", "dayz_server.bat"], _
    ["C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #3 Lingor Island Server\", "dayz_lingor_server.bat"],["C:\SERVER\Offizielle DayZ Privat Server\Sons Of Anarchy #4 1.7.2.6.1\", "dayz_server.bat"]]
    Global $Server[4] = [4, 2, 3, 1]

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

    While 1
    For $i = 0 To 3
    Do
    Sleep(1000 * 60)
    Until @MIN = 00
    _Restart($Server[$i])
    If @error = 1 Then ConsoleWrite('Server ' & $Server[$i] & ' ist abgeschaltet' & @LF)
    Next
    WEnd

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

    Func _Restart($iServer)
    Local $aPorts[5] = ["2302", "2308", "2309", "2322"], $iSleep = 60000
    If Not WinExists("ArmA 2 OA Console version 1.62 : port " & $aPorts[$iServer - 1]) Then SetError(1, 1)
    WinClose("ArmA 2 OA Console version 1.62 : port " & $aPorts[$iServer - 1])
    Sleep($iSleep)
    ShellExecute($aBat[$iServer - 1][1], "", $aBat[$iServer - 1][0])
    If @error Then SetError(2, 2)
    EndFunc ;==>_Restart

    [/autoit]

    8)

    LG
    Christoph :)