ArmA3 Serversteuerung

    • Tut- Complete

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • ArmA3 Serversteuerung

      ArmA3 Serversteuerung


      Ich stelle euch heute eine kleine Serversteuerung vor, die das Starten,
      Neustarten und Stoppen der Gameserver für eure Mitglieder ermöglicht.
      Das Grundmodell wurde von einem ehemaligem Clanmitglied erstellt
      und von mir vor ca. 3 Monaten generalüberholt.


      Zum einfügen dieses Systems benötigt ihr:
      • ein Windows-Betriebssystem (Oder ihr macht euch die Mühe und schreibt euch ein Linux-Script)
      • einen FTP-Server
      • etwas logisches Denken


      Das System besteht aus folgender Ordner-Struktur:


      Im Ordner 'original' befinden sich folgende Dateien auf dessen Funktion ich später noch genauer eingehen werde.


      Im Ordner 'programs' befinden sich folgende Dateien und Ordner:



      Im 'bats' Ordner befinden sich die .bat-Dateien die später die Startparameter etc. beinhalten:



      Und im 'StartStop' Ordner befindet sich folgendes:



      Fangen wir mit dem 'StartStop' Ordner an.
      Dort befinden sich verschiedene .txt-Dateien die eine bestimmte Funktion beschreiben. Möchten wir bspw. den
      Gameserver #1 neustarten, müssen wir einfach die '#1_neustarten.txt' löschen. Der Server wird nun neugestartet
      und die .txt wird in unserem Ordner neu erzeugt.
      Möchten wir den #2 Gameserver starten, müssen wir einfach die '#2_starten.txt' löschen.
      Nun wird der Server gestartet und es werden die Dateien '#2_stoppen.txt' und '#2_neustarten.txt' erzeugt (Beim 1. Server zu erkennen).
      Dieser Ordner wird später dann für die Mitglieder per FTP zu erreichen sein.
      Auf die Funktionsweise komme ich nachher zu sprechen.

      Nun geht es weiter zu dem 'original' Ordner.
      Wie oben zu sehen befinden sich dort die .txt-Dateien die wir eben auch schon im 'StartStop' Ordner gesehen haben.
      Und man kann es sich schon denken; Dort befinden sich alle benötigten .txt-Dateien die man für jeden Server
      benötigt und die dann einfach nur von A nach B kopiert werden.

      Nun kommen wir zum 'programs' Ordner und der Monitor.bat.
      Die Monitor.bat ist das Herzstück des ganzen, da sie für die .txt Verteilung und für die BAT-Ausführung sorgt.
      In folgendem Beispiel sieht man unsere Monitor.bat für drei Gameserver.
      (WICHTIG: Denkt daran die Pfade bei euch anzupassen)

      Quellcode: Monitor.bat

      1. @ECHO OFF
      2. ECHO ==================
      3. ECHO Monitoring started
      4. ECHO ==================
      5. title "Server Monitor"
      6. SET DELAY=5
      7. SET s01=1
      8. SET s02=1
      9. SET s03=1
      10. SET FOLDER=C:\Users\Administrator\Desktop\startsystem_Neu\StartStop\
      11. SET FOLDERORIGINAL=C:\Users\Administrator\Desktop\startsystem_Neu\original\
      12. SET BATFILES=C:\Users\Administrator\Desktop\startsystem_Neu\programs\bats\
      13. :Schleifenstart
      14. cd %FOLDER%
      15. IF %s01%==1 (
      16. if not exist #1_starten.txt ( call :s01start)
      17. )
      18. cd %FOLDER%
      19. IF %s01%==2 (
      20. if not exist #1_stoppen.txt ( call :s01stop)
      21. )
      22. cd %FOLDER%
      23. IF %s01%==2 (
      24. if not exist #1_neustarten.txt ( call :s01neustart)
      25. )
      26. cd %FOLDER%
      27. IF %s02%==1 (
      28. if not exist #2_starten.txt ( call :s02start)
      29. )
      30. cd %FOLDER%
      31. IF %s02%==2 (
      32. if not exist #2_stoppen.txt ( call :s02stop)
      33. )
      34. cd %FOLDER%
      35. IF %s02%==2 (
      36. if not exist #2_neustarten.txt ( call :s02neustart)
      37. )
      38. cd %FOLDER%
      39. IF %s03%==1 (
      40. if not exist #3_starten.txt ( call :s03start)
      41. )
      42. cd %FOLDER%
      43. IF %s03%==2 (
      44. if not exist #3_stoppen.txt ( call :s03stop)
      45. )
      46. cd %FOLDER%
      47. IF %s03%==2 (
      48. if not exist #3_neustarten.txt ( call :s03neustart)
      49. )
      50. timeout %DELAY% /nobreak > nul
      51. goto Schleifenstart
      52. :s01start
      53. title "Server #1 starten"
      54. echo =============================
      55. echo Time: %TIME%
      56. echo #1 Start
      57. copy %FOLDERORIGINAL%#1_stoppen.txt %FOLDER%#1_stoppen.txt
      58. copy %FOLDERORIGINAL%#1_neustarten.txt %FOLDER%#1_neustarten.txt
      59. echo =============================
      60. SET s01=2
      61. start "" /min "%BATFILES%s01-Starten.bat"
      62. exit /b
      63. goto :eof
      64. :s01stop
      65. title "Server #1 stoppen"
      66. set s01=1
      67. echo =============================
      68. echo Time: %TIME%
      69. echo #1 Stop
      70. copy %FOLDERORIGINAL%#1_starten.txt %FOLDER%#1_starten.txt
      71. del %FOLDER%#1_neustarten.txt /s /q
      72. echo =============================
      73. start "" /min "%BATFILES%s01-Stoppen.bat"
      74. exit /b
      75. goto :eof
      76. :s01neustart
      77. title "Server #1 neustarten"
      78. set s01=2
      79. echo =============================
      80. echo Time: %TIME%
      81. echo #1 Neustarten
      82. copy %FOLDERORIGINAL%#1_neustarten.txt %FOLDER%#1_neustarten.txt
      83. echo =============================
      84. start "" /min "%BATFILES%s01-Stoppen.bat"
      85. timeout 6 /nobreak > nul
      86. start "" /min "%BATFILES%s01-Starten.bat"
      87. exit /b
      88. goto :eof
      89. :s02start
      90. title "Server #2 starten"
      91. echo =============================
      92. echo Time: %TIME%
      93. echo #2 Start
      94. copy %FOLDERORIGINAL%#2_stoppen.txt %FOLDER%#2_stoppen.txt
      95. copy %FOLDERORIGINAL%#2_neustarten.txt %FOLDER%#2_neustarten.txt
      96. echo =============================
      97. SET s02=2
      98. start "" /min "%BATFILES%s02-Starten.bat"
      99. exit /b
      100. goto :eof
      101. :s02stop
      102. title "Server #2 stoppen"
      103. set s02=1
      104. echo =============================
      105. echo Time: %TIME%
      106. echo #2 Stop
      107. copy %FOLDERORIGINAL%#2_starten.txt %FOLDER%#2_starten.txt
      108. del %FOLDER%#2_neustarten.txt /s /q
      109. echo =============================
      110. start "" /min "%BATFILES%s02-Stoppen.bat"
      111. exit /b
      112. goto :eof
      113. :s02neustart
      114. title "Server #2 neustarten"
      115. set s02=2
      116. echo =============================
      117. echo Time: %TIME%
      118. echo #2 Neustarten
      119. copy %FOLDERORIGINAL%#2_neustarten.txt %FOLDER%#2_neustarten.txt
      120. echo =============================
      121. start "" /min "%BATFILES%s02-Stoppen.bat"
      122. timeout 6 /nobreak > nul
      123. start "" /min "%BATFILES%s02-Starten.bat"
      124. exit /b
      125. goto :eof
      126. :s03start
      127. title "Server #3 starten"
      128. echo =============================
      129. echo Time: %TIME%
      130. echo #3 Start
      131. copy %FOLDERORIGINAL%#3_stoppen.txt %FOLDER%#3_stoppen.txt
      132. copy %FOLDERORIGINAL%#3_neustarten.txt %FOLDER%#3_neustarten.txt
      133. echo =============================
      134. SET s03=2
      135. start "" /min "%BATFILES%s03-Starten.bat"
      136. exit /b
      137. goto :eof
      138. :s03stop
      139. title "Server #3 stoppen"
      140. set s03=1
      141. echo =============================
      142. echo Time: %TIME%
      143. echo #3 Stop
      144. copy %FOLDERORIGINAL%#3_starten.txt %FOLDER%#3_starten.txt
      145. del %FOLDER%#3_neustarten.txt /s /q
      146. echo =============================
      147. start "" /min "%BATFILES%s03-Stoppen.bat"
      148. exit /b
      149. goto :eof
      150. :s03neustart
      151. title "Server #3 neustarten"
      152. set s03=2
      153. echo =============================
      154. echo Time: %TIME%
      155. echo #3 Neustarten
      156. copy %FOLDERORIGINAL%#3_neustarten.txt %FOLDER%#3_neustarten.txt
      157. echo =============================
      158. start "" /min "%BATFILES%s03-Stoppen.bat"
      159. timeout 6 /nobreak > nul
      160. start "" /min "%BATFILES%s03-Starten.bat"
      161. exit /b
      162. goto :eof
      Alles anzeigen
      Weiter geht's im nächsten Post, da dieses Tutorial die maximale Zeichenanzahl sprengt..

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von Browser ()

    • Ich zeige euch nun wie ihr Server löschen und neu hinzufügen könnt.
      Zuerst kommt das Löschen des Servers 3 (Im Quellcode s03 genannt).
      Wir löschen zuerst alle Funktionen die mit ':s03' anfangen (Eine Funktion geht hier bis zu 'goto :eof').
      Nun gehen wir an den Anfang des Quellcodes und löschen 'SET s03=1' raus, da wir diese nun nicht mehr brauchen.
      Da die Variable 's03' nun nicht mehr existiert, müssen auch die jeweiligen darunter befindlichen Abfragen gelöscht werden.
      In unserem Fall wären dies:

      Quellcode

      1. cd %FOLDER%
      2. IF %s03%==1 (
      3. if not exist #3_starten.txt ( call :s03start)
      4. )
      5. IF %s03%==2 (
      6. if not exist #3_stoppen.txt ( call :s03stop)
      7. )
      8. IF %s03%==2 (
      9. if not exist #3_neustarten.txt ( call :s03neustart)
      10. )
      Alles anzeigen


      Wenn wir das getan haben, haben wir die Steuerung des Servers #3 aus unserer Monitor.bat entfernt.
      Nun können wir noch die .txt-/ und .bat-Dateien aus unseren Ordnern entfernen.

      Nun möchten wir einen neuen Server hinzufügen. Als Beispiel werde ich den Server #4 wählen.
      Ich werde erst alles einzeln erklären und danach einen kompletten Quellcode liefern.

      Zuerst legen wir die Variable s04 mit dem Befehl 'SET s04=1' an. Ich empfehle euch die Deklaration der Variablen
      immer am gleichen Ort (Oben bei 'SET s01=1' ) zu machen um Fehler zu vermeiden und um die Übersicht zu wahren.

      Nun folgen die Abfragen. Dazu nehmen wir uns einfach die Abfragen vom Server 2 und verändern diese wiefolgt:

      Quellcode

      1. cd %FOLDER%
      2. IF %s04%==1 (
      3. if not exist #4_starten.txt ( call :s04start)
      4. )
      5. IF %s04%==2 (
      6. if not exist #4_stoppen.txt ( call :s04stop)
      7. )
      8. IF %s04%==2 (
      9. if not exist #4_neustarten.txt ( call :s04neustart)
      10. )
      Alles anzeigen

      Damit wären die Abfragen und auch die Funktionsaufrufe erstellt.
      Nun müssen wir noch die Funktionen erstellen und anpassen.
      Auch hier nehmen wir uns wieder alle drei Funktionen von dem Server 2 und verändern diese wie folgt:

      Quellcode

      1. :s04start
      2. title "Server #4 starten"
      3. echo =============================
      4. echo Time: %TIME%
      5. echo #4 Start
      6. copy %FOLDERORIGINAL%#4_stoppen.txt %FOLDER%#4_stoppen.txt
      7. copy %FOLDERORIGINAL%#4_neustarten.txt %FOLDER%#4_neustarten.txt
      8. echo =============================
      9. SET s04=2
      10. start "" /min "%BATFILES%s04-Starten.bat"
      11. exit /b
      12. goto :eof
      13. :s04stop
      14. title "Server #4 stoppen"
      15. set s04=1
      16. echo =============================
      17. echo Time: %TIME%
      18. echo #4 Stop
      19. copy %FOLDERORIGINAL%#4_starten.txt %FOLDER%#4_starten.txt
      20. del %FOLDER%#4_neustarten.txt /s /q
      21. echo =============================
      22. start "" /min "%BATFILES%s04-Stoppen.bat"
      23. exit /b
      24. goto :eof
      25. :s04neustart
      26. title "Server #4 neustarten"
      27. set s04=2
      28. echo =============================
      29. echo Time: %TIME%
      30. echo #4 Neustarten
      31. copy %FOLDERORIGINAL%#4_neustarten.txt %FOLDER%#4_neustarten.txt
      32. echo =============================
      33. start "" /min "%BATFILES%s04-Stoppen.bat"
      34. timeout 6 /nobreak > nul
      35. start "" /min "%BATFILES%s04-Starten.bat"
      36. exit /b
      37. goto :eof
      Alles anzeigen

      Hierbei ist ein gewisses Maß an Konzentration gefragt um wirklich alle stellen die wichtig sind zu sehen.
      Wenn das erledigt ist haben wir unsere Monitor.bat auf unseren neuen Gameserver angepasst.
      Hier die neue Monitor.bat:

      Quellcode: Monitor.bat

      1. @ECHO OFF
      2. ECHO ==================
      3. ECHO Monitoring started
      4. ECHO ==================
      5. title "Server Monitor"
      6. SET DELAY=5
      7. SET s01=1
      8. SET s02=1
      9. SET s04=1
      10. SET FOLDER=C:\Users\Administrator\Desktop\startsystem_Neu\StartStop\
      11. SET FOLDERORIGINAL=C:\Users\Administrator\Desktop\startsystem_Neu\original\
      12. SET BATFILES=C:\Users\Administrator\Desktop\startsystem_Neu\programs\bats\
      13. :Schleifenstart
      14. cd %FOLDER%
      15. IF %s04%==1 (
      16. if not exist #4_starten.txt ( call :s04start)
      17. )
      18. IF %s04%==2 (
      19. if not exist #4_stoppen.txt ( call :s04stop)
      20. )
      21. IF %s04%==2 (
      22. if not exist #4_neustarten.txt ( call :s04neustart)
      23. )
      24. timeout %DELAY% /nobreak > nul
      25. goto Schleifenstart
      26. :s01start
      27. title "Server #1 starten"
      28. echo =============================
      29. echo Time: %TIME%
      30. echo #1 Start
      31. copy %FOLDERORIGINAL%#1_stoppen.txt %FOLDER%#1_stoppen.txt
      32. copy %FOLDERORIGINAL%#1_neustarten.txt %FOLDER%#1_neustarten.txt
      33. echo =============================
      34. SET s01=2
      35. start "" /min "%BATFILES%s01-Starten.bat"
      36. exit /b
      37. goto :eof
      38. :s01stop
      39. title "Server #1 stoppen"
      40. set s01=1
      41. echo =============================
      42. echo Time: %TIME%
      43. echo #1 Stop
      44. copy %FOLDERORIGINAL%#1_starten.txt %FOLDER%#1_starten.txt
      45. del %FOLDER%#1_neustarten.txt /s /q
      46. echo =============================
      47. start "" /min "%BATFILES%s01-Stoppen.bat"
      48. exit /b
      49. goto :eof
      50. :s01neustart
      51. title "Server #1 neustarten"
      52. set s01=2
      53. echo =============================
      54. echo Time: %TIME%
      55. echo #1 Neustarten
      56. copy %FOLDERORIGINAL%#1_neustarten.txt %FOLDER%#1_neustarten.txt
      57. echo =============================
      58. start "" /min "%BATFILES%s01-Stoppen.bat"
      59. timeout 6 /nobreak > nul
      60. start "" /min "%BATFILES%s01-Starten.bat"
      61. exit /b
      62. goto :eof
      63. :s02start
      64. title "Server #2 starten"
      65. echo =============================
      66. echo Time: %TIME%
      67. echo #2 Start
      68. copy %FOLDERORIGINAL%#2_stoppen.txt %FOLDER%#2_stoppen.txt
      69. copy %FOLDERORIGINAL%#2_neustarten.txt %FOLDER%#2_neustarten.txt
      70. echo =============================
      71. SET s02=2
      72. start "" /min "%BATFILES%s02-Starten.bat"
      73. exit /b
      74. goto :eof
      75. :s02stop
      76. title "Server #2 stoppen"
      77. set s02=1
      78. echo =============================
      79. echo Time: %TIME%
      80. echo #2 Stop
      81. copy %FOLDERORIGINAL%#2_starten.txt %FOLDER%#2_starten.txt
      82. del %FOLDER%#2_neustarten.txt /s /q
      83. echo =============================
      84. start "" /min "%BATFILES%s02-Stoppen.bat"
      85. exit /b
      86. goto :eof
      87. :s02neustart
      88. title "Server #2 neustarten"
      89. set s02=2
      90. echo =============================
      91. echo Time: %TIME%
      92. echo #2 Neustarten
      93. copy %FOLDERORIGINAL%#2_neustarten.txt %FOLDER%#2_neustarten.txt
      94. echo =============================
      95. start "" /min "%BATFILES%s02-Stoppen.bat"
      96. timeout 6 /nobreak > nul
      97. start "" /min "%BATFILES%s02-Starten.bat"
      98. exit /b
      99. goto :eof
      100. :s04start
      101. title "Server #4 starten"
      102. echo =============================
      103. echo Time: %TIME%
      104. echo #4 Start
      105. copy %FOLDERORIGINAL%#4_stoppen.txt %FOLDER%#4_stoppen.txt
      106. copy %FOLDERORIGINAL%#4_neustarten.txt %FOLDER%#4_neustarten.txt
      107. echo =============================
      108. SET s04=2
      109. start "" /min "%BATFILES%s04-Starten.bat"
      110. exit /b
      111. goto :eof
      112. :s04stop
      113. title "Server #4 stoppen"
      114. set s04=1
      115. echo =============================
      116. echo Time: %TIME%
      117. echo #4 Stop
      118. copy %FOLDERORIGINAL%#4_starten.txt %FOLDER%#4_starten.txt
      119. del %FOLDER%#4_neustarten.txt /s /q
      120. echo =============================
      121. start "" /min "%BATFILES%s04-Stoppen.bat"
      122. exit /b
      123. goto :eof
      124. :s04neustart
      125. title "Server #4 neustarten"
      126. set s04=2
      127. echo =============================
      128. echo Time: %TIME%
      129. echo #4 Neustarten
      130. copy %FOLDERORIGINAL%#4_neustarten.txt %FOLDER%#4_neustarten.txt
      131. echo =============================
      132. start "" /min "%BATFILES%s04-Stoppen.bat"
      133. timeout 6 /nobreak > nul
      134. start "" /min "%BATFILES%s04-Starten.bat"
      135. exit /b
      136. goto :eof
      Alles anzeigen

      Nun fehlen noch die BATS und die .txt-Dateien.

      Zuerst die .txt-Dateien.
      Dazu gehen wir in unseren 'original' Ordner und erstellen für den neuen Server folgende Dateien: '#4_starten', '#4_stoppen', '#4_neustarten'
      Die '#4_starten' kopieren wir direkt in unseren 'StartStop' Ordner, um das korrekte Anlaufen unserer Monitor.bat zu ermöglichen.

      Jetzt noch die .bat-Dateien.
      Diese sollten selbstverständlich genauso heißen wie wir sie in unserer Monitor.bat aufgerufen haben (Bei mir heißen sie bspw. s04-Starten.bat).
      In die Start-.bat kommen dann alle Startparameter für unseren Server sowie die verschiedenen Modstrings für Server und Clients.
      Als Beispiel mit HC (Public-Server ohne PW auf Port 2342 und ohne .rpts):

      Quellcode: s04-Starten.bat

      1. start "ArmA" /D "C:\working\server\a3\s04" "C:\working\server\a3\s04\arma3s04.exe" -server -noLogs -enableHT -maxmem=XXXX -high "-malloc=tbbmalloc" -config=server.cfg -profiles=C:\ArmA3\A3Master -port=2342 -cfg=basic.cfg -loadMissionToMemory " -serverMod=@ASM;@extDB3;@extDB3_jgzga_server" " -mod=@cba_a3;@task_force_radio;@ace;"
      2. start "ArmA" /D "C:\working\server\a3\s04" "C:\working\server\a3\s04\arma3s04hc.exe" -client -noLogs -maxmem=XXXX -name=HC -enableHT -connect =127.0.0.1 -port=2342 " -mod=@cba_a3;@task_force_radio;@ace;
      3. exit

      Die .exe-Dateien sind für uns besonders wichtig weil sie in der .bat zum stoppen der Server benötigt werden.
      Hier ein Beispiel für eine s04-Stoppen.bat:

      Quellcode: s04-Stoppen.bat

      1. taskkill /IM arma3s04.exe /F
      2. taskkill /IM arma3s04hc.exe /F
      3. exit

      Damit wird der #4 Server heruntergefahren.
      (Pro-Tipp: Lasst die beiden .bat-Dateien erst einmal leer bis ihr alles auf Funktion geprüft habt)

      Wenn wir das alles gemacht haben können wir unsere Monitor.bat starten.
      Wir sehen nun folgendes Bild:


      Da brauch man nicht viel erklären.. Wir bekommen eine kurze Meldung das der Monitor gestartet wurde und die .bat läuft.
      Sollte eine oder mehrere Fehlermeldungen auftauchen müsst ihr die .bat noch einmal schließen und euren Quellcode überprüfen,
      ob ihr nicht irgendwas bei Kopieren und verändern vergessen habt. Meistens hilft euch da die Fehlermeldung weiter.

      Sollte aber alles Fehlerfrei sein könnt ihr nun mal testweise eure Start-.txt-Datei in eurem 'StartStop' Ordner löschen.
      Nun sollte folgendes zu sehen sein:


      Weiter geht's im nächsten Post ;)

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Browser ()

    • Diesen Informationen können wir entnehmen welche Funktion ausgeführt und zu welcher Zeit und was für Aktionen das ausgelöst hat.
      Hier wurde der Server 4 um 17:06 gestartet und es wurden 2 Dateien kopiert (die Neustarten-/ und Stoppen.txt).
      Die beiden anderen Funktionen könnt ihr ja selber ausprobieren.

      Wenn alles geklappt hat, habt ihr euren neuen Server erfolgreich in das Startsystem integriert.

      Damit eure Mitglieder das jetzt auch nutzen können, müsst ihr den 'StartStop' Ordner auf eurem FTP-Server
      freigeben (Lese-/ und Löschrechte sind wichtig). Am besten legt ihr dafür einen Separaten Benutzer mit Passwort an den eure Mitglieder nutzen können.
      Jetzt noch die Benutzerdaten im Internen Forum verteilen und die Monitor.bat laufen lassen und schon können eure Mitglieder die Server kontrollieren.

      Ich hoffe ich konnte ein paar Leuten mit diesem System und der dazu beiliegenden Anleitung helfen.
      Bei Fragen an das System könnt ihr diese gerne unten reinschreiben.

      Noch ein paar Abschließende Worte:
      Wenn mir jemand ankommt mit „Das hätte man aber so und so machen können/sollen“ und dabei meinen kompletten
      Code auseinander nimmt, oder auch „Wie scheiße ist das denn geschrieben..“ werde ich das natürlich Ignorieren und löschen lassen.
      Konstruktive Kritik oder Verbesserungsvorschläge gehen natürlich immer ;)

      Mit freundlichen Grüßen,
      Browser

      Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von Browser ()