Start/Stop.bat schreiben und verwenden [Windows]

Der neue Support Bereich ist absofort unter community.teklab.de zu finden.

Leider bietet das WBB keinen vernünftigen Spamschutz, daher sind Neuanmeldungen gesperrt. Wir werden die nächsten Tage das Handbuch/WIKI im neuen Support Bereich übernehmen. Dieses Forum bleibt jedoch mit seinen bisherigen Beiträgen, für alle die die Suchfunktion nutzen wollen, vorerst erhalten. User die über den Kundenbereich die Zugangsdaten erhalten und Bestandsuser können das Forum weiter nutzen. Jedoch würden wir alle gerne im neuen Support Bereich begrüßen wollen.

Anfang Juni wird im Kundenbereich automatisch ein Zugang zum neuen Support Bereich angelegt, ähnlich wie es derzeit für WBB geschieht. Somit entfällt dann die Neuanmeldung. ;)

  • Start/Stop.bat schreiben und verwenden [Windows]

    Moin zusammen :)

    Da ich keinen direkten Beitrag zur Start und stop.bat gefunden habe, habe ich mich mal ran gesetzt um eine Erklärung dazu zu schreiben :) Die verwendeten variablen sind anpassbar und die .bat-Datei vielseitig einsetzbar.

    Warum ein Tutorial ?

    Ich kannte mich bis vor kurzem nicht damit aus und musste mich erst einmal damit beschäftigen, was für den leihen im Start seiner Karriere sicherlich nicht so einfach ist. Soviel zum Vorwort ;)

    Fangen wir an.

    Wie nenne ich meine Datei?

    Zur Übersicht habe ich meine Datei "Spiel"start.bat (armastart.bat) genannt. Für CS:GO würde ich sie "csgostart.bat" nennen. Das kann man aber gestalten wie man möchte :) Also gehst du wie folgt vor:
    1. Text Dokument auf dem Desktop anlegen
    2. Dieses per rechtsklick anwählen Un umbenennen (bei mir armastart.bat)
    3. Datei rechtsklicken und bearbeiten wählen

    Jetzt hat sich bei dir ein Textfenster geöffnet. Sieht ein wenig leer darin aus. Das musst du ändern ! Aber wie?

    Wie füllst du deine Start Datei?

    Eine Start.bat muss die Server Prozess-Id lesen und Speichern können. Das dient zum späteren beenden des Servers und ist wichtig für die my_stop.bat ;) Hier die Zeilen dazu:

    Shell-Script: armastart.bat

    1. SET mypath=%~dp0
    2. for /f "tokens=2 delims==; " %%a in (' wmic process call create "%mypath:~0,-1%\armalll\arma3server_x64.exe -port=%1" ^| find "ProcessId" ') do set PID=%%a
    3. echo %PID% > pid.txt

    was bedeutet das ??...


    Wird hier wohl deine erste Frage sein. Ich habs am Anfang auch nicht verstanden, ist aber relativ easy ;) Zur Erklärung

    Wir fangen oben an:
    "Set mypath=" ist eine leere variable die ich mit einem Wert fülle.
    "%~dp0" ist dieser Wert und gibt mir den Ordner aus , indem sich diese .bat befindet.

    Ab hier gibt's ne kleine Pause für dich ..
    ..
    ..
    ..

    Weiter geht's ;)

    Den Rest zerpflücke ich jetzt nicht aber fasse in kurz zusammen. Er startet den Server, liest die tasklist (Prozessliste) aus und schnappt sich den neusten Prozess mit dem passenden imagename (Anwendungsname).... puhhh, ganz schön viel theorie...

    Zuletzt schnappt er sich die Prozess-ID und speichert sie in selben Ordner wie die .bat Datei in die Datei pid.txt :) Fertig ist das startscript :)

    Aber Moment ... Manche spiele benötigen doch Startparameter. ...

    Wie Startparameter angeben ?

    Wenn du genau hinschaust, siehst du oben hinter meiner arma3server_x64.exe ein "-port=%1". Was -port bedeutet ist wahrscheinlich klar .. Aber das %1 ?

    %1 ist ein parameter, den ich an die armastart.bat übergeben habe.

    Wie habe ich das gemacht ?

    GAnz einfach. Bei jedem Gameserver kann man den Starbefehl angeben. Dieser sieht bei mir so aus:

    armastart.bat gsport

    Und das wars .. Die Parameter können natürlich erweitert werden. Würde ich jetzt noch die Spieler mit angeben wollen sieht mein Befehl wie folgt aus :


    armastart.bat gsport gsplayer


    In meiner armastart.bat könnte ich dann %1 für den Port und %2 für die Spieler verwenden. Also eigentlich ganz einfach :)

    Wir stoppst du jetzt den Server?

    Auch total einfach ;) diesmal heißt die Datei aber "my_stop.bat". Diese können wir nicht umbenennen. Sie liegt im selben Verzeichnis wie die armastart.bat, muss allerdings nicht deklariert werden, da sie in TekBase so hinterlegt ist. Ihr Inhalt könnte wie folgt aussehen :


    Shell-Script: my_stop.bat

    1. @echo off
    2. for /f %%i in (pid.txt) do (
    3. set PID=%%i
    4. )
    5. echo %PID%
    6. taskkill /f /pid %PID%
    7. del pid.txt


    Hier wird die pid.txt mit der gespeicherten Prozess-ID ausgelesen und der Prozess beendet, sowie die pid.txt gelöscht.

    Das wars eigentlich soweit :)
    Ich hoffe ich konnte dir helfen.
    MfG Crossi
    vKompaniechef
    10.Fallschirmjägerkompanie Arma 3
    Wenn Taktik verbindet !
  • Das Ding mit der Pid in eine Textdatei schreiben ist eine relativ träge Angelegenheit, hat jemand einen zu schnellen Finger und klickt mehrmals auf Serverstart, kann es sein, das da schon die Probleme anfangen. Daher bevorzuge ich die Methode die Pid direkt beim Serverstart / Stop aus der Tasklist zu lesen. Damit ist auch sichergestellt das zu der Zeit auch wirklich ein Prozess mit der Pid existiert und es kann kein Löschwütiger, wie es schon ab und zu mal vorkommt die pid.txt löschen.

    Damit bist Du eigentlich von irgendwelchen Prozess Aufzeichnungen in txt oder XML unabhängig und sagst dem System nur "gib mir die Pid welche die exe "xyz.exe" im Verzeichnis "abc " verursacht. mit der Art und Weise kannst Du die Startbatch auch absichern das kein Prozess von der gleichen Exe doppelt gestartet wird oder das der Server nicht starten kann wenn Steamcmd läuft.


    Quellcode

    1. SET var=%~dp0
    2. SET line=%var%
    3. SETLOCAL ENABLEDELAYEDEXPANSION
    4. ECHO !line:\=\\
    5. ENDLOCAL
    6. set vara=!line:\=\\!
    7. for /f "usebackq tokens=2 delims==" %%a in (`wmic process where ^(ExecutablePath^="%vara%ShooterGame\\Binaries\\Win64\\ShooterGameServer.exe"^) get processid /value`) do (
    8. set PID=%%a
    9. )


    Absicherung wenn z.b SteamCMD läuft

    Quellcode

    1. SET var=%~dp0
    2. SET line=%var%
    3. SETLOCAL ENABLEDELAYEDEXPANSION
    4. ECHO !line:\=\\!
    5. ENDLOCAL
    6. set vara=!line:\=\\!
    7. for /f "usebackq tokens=2 delims==" %%a in (`wmic process where ^(ExecutablePath^="%vara%updater\\steamcmd.exe"^) get processid /value`) do (
    8. goto Exit
    9. )
    10. //// weiterer Startcode
    11. :Exit
    12. Exit
    Alles anzeigen

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von gamerzhost.de ()

  • Quellcode

    1. SET mypath=%~dp0for /f "tokens=2 delims==; " %%a in (' wmic process call create "%mypath:~0,-1%\arma3server_x64.exe -port=%1" ^| find "ProcessId" ') do set PID=%%aecho %PID% > pid.txt
    Bekomme permanet Cannot start host on port 0.



    Quellcode

    1. arma3start.bat -port gsport -config=server.cfg -cfg=basic.cfg -mod=@extDB3 -mod=@life_server -mod=@Sperrzonensystem
  • Also ich würde sagen das -port %1 ist und gsport %2 -config=server.cfg ist dann %3 gerade weil -port gsport nicht -port=gsport heißt sind es zwei Werte. Du kannst aber mal -port rauslassen gehts dann? Den dann wäre gsport wieder der erste Parameter
    Bitte die Forumsuche und das Handbuch verwenden. Wenn die Suche erfolglos war, bitte ein Thema erstellen und das Problem ausführlich beschreiben. Dieser Ablauf spart Zeit und unnötige Fragen zu immer gleichen Problemen. Sie können uns aber auch eine Supportanfrage zukommmen lassen.

    Gefällt Ihnen TekLab?
  • Falls jemand Interesse hat meine Arma3 Start bat für den privaten Gebrauch. Autoupdate is auch gleich drinnne. Muss nur noch ne Möglichkeit finden wie ich das mit den Mods mache

    Shell-Script

    1. @echo off
    2. COLOR fc
    3. title Arma 3 Server [armaiii_w_6331]
    4. :: Settings:
    5. SETLOCAL ENABLEDELAYEDEXPANSION
    6. SET STEAMLOGIN=loginname passwort
    7. SET ARMA3serverBRANCH=233780
    8. SET ARMA3serverPath=D:\gameserver\kunde\server\armaiii_w_6331
    9. SET STEAMPATH=D:\steamcmd
    10. SET IP=111.111.111.111
    11. SET PORT=2330
    12. SET mods=mods\@ace;mods\@ACEX;mods\@task_force_radio;mods\@BW_Kleiderkammer;mods\@bwa3;mods\@bwa3_ace;mods\@BWDR;mods\@CBA_A3;mods\@CUP_Terrains_Complete;mods\@EasyTrack;mods\@RHSAFRF;mods\@RHSGREF;mods\@RHSUSAF;mods\@a3bw_vrp_f;mods\@MCC;
    13. SET -serverMod=@aceserver;
    14. SET config=config.cfg
    15. SET cfg=bandwidth.cfg
    16. :: _________________________________________________________
    17. @SCHTASKS /END /TN "Arma 3 Server" >NUL 2>&1
    18. taskkill /F /IM arma3server_mission.exe >NUL 2>&1
    19. echo.
    20. echo You are about to update Arma 3 server
    21. echo Dir: %ARMA3serverPath%
    22. echo Branch: %ARMA3serverBRANCH%
    23. echo.
    24. %STEAMPATH%\steamcmd.exe +login %STEAMLOGIN% +force_install_dir %ARMA3serverPath% +"app_update %ARMA3serverBRANCH%" validate +quit
    25. echo .
    26. echo Your Arma 3 server is now up to date
    27. del arma3server_mission.exe /s /q
    28. rename arma3server_x64.exe arma3server_mission.exe
    29. @SCHTASKS /END /TN "Arma 3 Server" >NUL 2>&1
    30. taskkill /F /IM arma3server_mission.exe >NUL 2>&1
    31. start arma3server_mission.exe -mod=%mods% -config=%config% -cfg=%cfg% -port=%PORT% -enableHT -maxMem=3071 -exThreads=7 -noCB -noPause -noSound
    32. exit
    Alles anzeigen