Игровые серверы на часы. Платите, только когда играете.

Сервер CS2 падает при смене карты (GOTV включён): решение в одну строку

Ваш сервер CS2 работает нормально, потом меняется карта и всех выкидывает: сервер упал. Если GOTV включён и игроки были подключены, это именно этот баг. Сначала решение, потом причина.

Решение: одна строка

Добавьте это в game/csgo/cfg/server.cfg:

bot_join_delay 15
  • Теперь боты ждут 15 секунд после каждой смены карты, прежде чем зайти.
  • Падение происходит, когда боты заходят, пока игрок ещё загружает новую карту. С задержкой игроки загружаются первыми.
  • GOTV остаётся включённым. Демо продолжают записываться, зрители продолжают смотреть.
  • Чтобы применить без перезапуска, отправьте через RCON: rcon bot_join_delay 15

В нашей лаборатории без неё падали 3 из 6 смен карты. С ней не упала ни одна из 18: смены посреди матча, в конце матча и переключения режима на лету. Каждый сервер CS2 на 2hours.gg поставляется с ней.

Когда это происходит

Всё это одновременно:

  • SourceTV (GOTV) включён: tv_enable 1
  • Подключён хотя бы один реальный игрок. Сервер только с ботами ни разу не падал.
  • Меняется уровень: карта выбрана из консоли, через changelevel или map, закончился матч или прошло голосование в конце матча.

Это случайно. В наших тестах падала примерно половина смен карты, а на живых серверах это случалось чаще при 3 и более подключённых игроках. Сервер, переживший одну смену, может упасть на следующей.

Как это выглядит: все игроки отключаются одновременно во время загрузки карты, а лог сервера заканчивается ошибкой сегментации (SIGSEGV) вместо запуска новой карты.

Разница между режимами

Конфиг Valve для каждого режима задаёт, сколько ботов заходит при каждой загрузке карты. Чем больше ботов заходит, тем выше шанс падения:

  • Deathmatch, Team Deathmatch, Casual: до 10 ботов заходят при каждой загрузке. Самые уязвимые режимы, именно здесь мы видели больше всего падений.
  • Competitive: 1 бот. В нашей лаборатории он не падал без исправления, но живые серверы с большим числом игроков падали.
  • Решение одинаково для всех режимов: bot_join_delay является одной настройкой, которая действует при любой смене карты, чем бы она ни была вызвана.

Настоящий баг (для любопытных)

Это баг движка Valve, а не плагина. Сервер падал и без Metamod и CounterStrikeSharp. О нём сообщают с 2024 года в ValveSoftware/csgo-osx-linux#3831. Следите за ним там: надеемся, Valve скоро его исправит и этот обходной путь станет не нужен.

Что мы нашли с помощью отладчика:

  • При смене карты SourceTV отключается и отсоединяет подключённого игрока с причиной "SourceTV stopped" (HLTVSTOP), хотя это обычный игрок, а не зритель GOTV.
  • У этого наполовину отключённого игрока остаётся пустой внутренний объект. На чистом сервере движок сразу падает на нём (libengine2.so).
  • Если этот шаг проходит, игровой код падает секундой позже, когда боты заходят на новую карту (libserver.so). Именно это падение предотвращает bot_join_delay, и именно оно было во всех падениях, которые мы видели на серверах с CounterStrikeSharp.
  • На чистом сервере без Metamod мы также видели первое падение, на стороне движка. Против него мы bot_join_delay ещё не проверяли.

Что не работает

  • tv_enable 0 во время игры: отключает всех игроков сразу.
  • GOTV выключен с запуска: падений нет, но нет ни демо, ни просмотра.
  • tv_delay, tv_delaymapchange, tv_autorecord 0, tv_stoprecord: падения остаются. Остановить демо недостаточно: сервер падал вообще без записи демо.
  • bot_quota 0 в _server.cfg режима: срабатывает и при каждом перезапуске матча и может выкинуть сам SourceTV, так что GOTV прекращает запись посреди карты.
  • map вместо changelevel: то же падение.

Полная настройка для своего сервера

Что мы используем на каждом сервере, в server.cfg:

tv_enable 1
tv_autorecord 1
bot_join_delay 15
  • Держите это в server.cfg, а не только в разовой команде RCON, чтобы настройка возвращалась после перезапуска.
  • Мы проверяли 15 секунд. Игрокам с медленным соединением или на больших картах Workshop нужно больше времени на загрузку, поэтому значение побольше надёжнее и лишь означает, что боты зайдут чуть позже.
  • Чтобы проверить, что настройка активна, введите в консоли сервера или через RCON: bot_join_delay
  • Играете без ботов? Всё равно оставьте: режимы вроде Deathmatch и Casual по умолчанию добавляют ботов при каждой загрузке карты.

Или пропустите настройку: каждый сервер CS2 на 2hours.gg уже содержит исправление, с включёнными GOTV и демо.

Запустить почасовой сервер CS2

Смотрите также

← Назад ко всем руководствам