Dein CS2-Server läuft problemlos, dann wechselt die Map und alle fliegen raus: Der Server ist abgestürzt. Wenn GOTV an war und Spieler verbunden waren, ist es dieser Bug. Hier die Lösung und danach die Ursache.
Die Lösung: eine Zeile
Füge das hier ein in game/csgo/cfg/server.cfg:
bot_join_delay 15- Bots warten jetzt nach jedem Mapwechsel 15 Sekunden, bevor sie joinen.
- Der Absturz passiert, wenn Bots joinen, während ein Spieler noch die neue Map lädt. Mit der Verzögerung laden die Spieler zuerst.
- GOTV bleibt an. Demos werden weiter aufgenommen, Zuschauer schauen weiter zu.
- Um es ohne Neustart anzuwenden, schick es per RCON:
rcon bot_join_delay 15
In unserem Lab: Ohne die Zeile stürzten 3 von 6 Mapwechseln ab. Mit ihr 0 von 18, bei Wechseln mitten im Match, am Matchende und bei Moduswechseln im laufenden Betrieb. Jeder CS2-Server von 2hours.gg hat sie ab Werk.
Wann es passiert
Alles davon gleichzeitig:
- SourceTV (GOTV) ist aktiviert:
tv_enable 1 - Mindestens ein echter Spieler ist verbunden. Ein Server nur mit Bots ist nie abgestürzt.
- Das Level wechselt: eine Map aus der Konsole, changelevel oder map, das Ende eines Matches oder die Abstimmung am Matchende.
Es ist zufällig. In unseren Tests stürzte etwa die Hälfte der Mapwechsel ab, und auf Live-Servern passierte es häufiger mit 3 oder mehr verbundenen Spielern. Ein Server, der einen Wechsel überstanden hat, kann beim nächsten abstürzen.
So sieht es aus: Alle Spieler fliegen während des Map-Ladens gleichzeitig raus, und das Server-Log endet mit einem Speicherzugriffsfehler (SIGSEGV), statt dass die neue Map startet.
Unterschiede zwischen den Modi
Die Valve-Config jedes Modus legt fest, wie viele Bots bei jedem Map-Laden joinen. Mehr joinende Bots bedeuten mehr Absturzrisiko:
- Deathmatch, Team Deathmatch, Casual: Bis zu 10 Bots joinen bei jedem Laden. Am stärksten betroffen, hier sahen wir die meisten Abstürze.
- Competitive: 1 Bot. In unserem Lab stürzte es ohne die Lösung nicht ab, Live-Server mit mehr Spielern aber schon.
- Die Lösung ist in jedem Modus gleich: bot_join_delay ist eine einzige Einstellung, die für jeden Mapwechsel gilt, egal wodurch er ausgelöst wurde.
Der eigentliche Bug (für Neugierige)
Es ist ein Bug in Valves Engine, kein Plugin. Es stürzte auch ohne Metamod und CounterStrikeSharp ab. Er ist seit 2024 gemeldet als ValveSoftware/csgo-osx-linux#3831. Verfolge ihn dort: Wir hoffen, dass Valve ihn bald behebt und dieser Workaround überflüssig wird.
Was wir mit einem Debugger gefunden haben:
- Beim Mapwechsel fährt SourceTV herunter und trennt den verbundenen Spieler mit dem Grund "SourceTV stopped" (HLTVSTOP), obwohl er ein normaler Spieler ist und kein GOTV-Zuschauer.
- Dieser halb getrennte Spieler bleibt mit einem leeren internen Objekt zurück. Auf einem Server ohne Plugins stürzt die Engine sofort daran ab (libengine2.so).
- Übersteht der Server diesen Schritt, stürzt der Spielcode eine Sekunde später ab, wenn Bots der neuen Map joinen (libserver.so). Genau das verhindert bot_join_delay, und es war jeder Absturz, den wir auf CounterStrikeSharp-Servern gesehen haben.
- Auf einem Server ohne Metamod sahen wir auch den ersten Absturz in der Engine. bot_join_delay haben wir dagegen noch nicht getestet.
Was nicht funktioniert
tv_enable 0während eines Spiels: wirft alle Spieler gleichzeitig raus.- GOTV ab dem Start aus: kein Absturz, aber keine Demos und kein Zuschauen.
tv_delay,tv_delaymapchange,tv_autorecord 0,tv_stoprecord: stürzen trotzdem ab. Die Demo zu stoppen reicht nicht: Es stürzte auch ganz ohne laufende Demo-Aufnahme ab.bot_quota 0in der _server.cfg eines Modus: läuft auch bei jedem Match-Neustart und kann SourceTV selbst kicken, dann hört GOTV mitten auf der Map auf aufzunehmen.mapstatt changelevel: derselbe Absturz.
Ein komplettes Setup für deinen eigenen Server
Das läuft auf jedem unserer Server, in server.cfg:
tv_enable 1
tv_autorecord 1
bot_join_delay 15- Behalte es in server.cfg und nicht nur als einmaligen RCON-Befehl, damit es nach einem Neustart wieder da ist.
- 15 Sekunden haben wir getestet. Spieler mit langsamer Verbindung oder auf großen Workshop-Maps laden länger, ein höherer Wert ist also sicherer und bedeutet nur, dass Bots etwas später kommen.
- Um zu prüfen, ob es aktiv ist, gib in der Server-Konsole oder per RCON ein:
bot_join_delay - Du spielst ohne Bots? Behalte es trotzdem: Modi wie Deathmatch und Casual fügen standardmäßig bei jedem Map-Laden Bots hinzu.
Oder spar dir das Setup: Jeder CS2-Server auf 2hours.gg hat die Lösung schon, mit GOTV und Demos an.
CS2-Server stundenweise deployen