«Сервер после обновления не работает» — фраза, за которой прячутся как минимум две разные поломки. В первой процесс не доходит до состояния, когда он готов принимать игроков: он падает, зависает на загрузке или тихо перезапускается. Во второй процесс жив, мир загружен, но клиент либо не видит сервер, либо получает отказ при входе. Лечатся эти случаи по-разному, и если перепутать их в самом начале, можно полчаса менять порты на сервере, который просто не успел прочитать мир.

Поэтому разумнее не искать «то самое исправление», а идти по дереву: от того, что можно наблюдать, к тому, что нужно проверять. Каждый шаг отсекает часть возможных причин и не требует разрушительных действий. В частности, ни на одном этапе здесь не понадобится удалять сохранение или переустанавливать сервер вместе с каталогом мира. Прогресс игроков — единственное, что нельзя пересоздать, и всё остальное в этой истории вторично.

Сначала выясняем, дошёл ли процесс до готовности

Начните с самого приземлённого вопроса: что делает процесс сервера прямо сейчас. Есть три наблюдаемых состояния, и каждое ведёт в свою ветку.

  • Процесса нет. Он запустился и завершился. Смотреть нужно вывод консоли или журнал сервиса: причина почти всегда записана в последних строках перед остановкой.
  • Процесс есть, но потребляет ресурсы и не отвечает. Возможно, он ещё грузит мир. После обновления формат данных или объём загрузки могут измениться, поэтому первый старт иногда дольше обычного. Прежде чем делать выводы, дайте ему время и следите за нагрузкой на диск и процессор.
  • Процесс стабилен, в журнале видна готовность, но клиент не входит. Это уже вторая ветка: сервер жив, значит, ищем разницу между тем, что ждёт сервер, и тем, что приносит клиент.

Здесь полезен простой приём: не полагаться на сообщение клиента. Клиент говорит «нет соединения» и в случае несовместимости версий, и в случае закрытого порта, и в случае сервера, который ещё грузится. Сообщение одинаково, причины разные. Источником истины о состоянии сервера служит сам сервер: его журнал и административные команды.

Если вы можете подключиться к серверу как администратор, команда /Info выводит сведения о сервере (так описано в документации по командам администратора). Ответ на неё — быстрый способ убедиться, что сервер не просто «существует» как процесс, а реально обрабатывает запросы, и заодно увидеть, какую версию он о себе сообщает. Если команда не отвечает, вы остаётесь в первой ветке, и разговор о клиентах преждевременен.

Что искать в журнале запуска

Не пытайтесь прочесть весь журнал. Ищите три вещи: строки об ошибках и отказах рядом с моментом остановки, упоминания файла настроек или параметров, и признаки того, что мир начал загружаться или завершил загрузку. Если последняя строка перед падением относится к настройкам, следующая ветка дерева — параметры. Если к загрузке данных мира, то это вопрос сохранений. Если журнал чист, а процесс просто исчезает, проверьте, не убивает ли его система из-за нехватки памяти: после обновления потребление может отличаться, а ресурсы вашего тарифа могут оказаться тесноваты.

Версии клиента и сервера: самая частая разница

Когда сервер готов, а игроки не входят, первым подозреваемым стоит назначить несовпадение версий. Игровой клиент обновляется у игроков по своему расписанию, сервер — по вашему. Если обновился только один из участников, входа не будет, хотя сеть при этом исправна. Это не значит, что любое «не входит» объясняется версиями, но проверить это дёшево, а исключение причины сильно сужает поиск.

Разберите ситуацию по тому, кто и как жалуется:

Как по симптому отличить версию от сети
Что наблюдаетсяЧто это вероятнее всего означаетСледующий шаг
Не входят все игроки сразу, сервер отвечает на /InfoОбщая разница: версия сервера или общая настройка доступаСверить версию сервера с версией клиента у нескольких игроков
Входят одни, не входят другиеРазные версии клиентов или ограничения по платформеСравнить версию клиента и платформу у входящих и не входящих
Не входит никто, включая администратора с самого сервераСервер не готов или не слушает ожидаемый портВернуться к журналу и параметрам запуска
Вход идёт долго и обрывается по таймаутуМожет быть нагрузка при загрузке мира, а не блокировка сетиПосмотреть нагрузку на диск и процессор во время входа

Последняя строка таблицы заслуживает отдельного внимания. Таймаут — это лишь сообщение о том, что ответ не пришёл вовремя. Не пришёл он потому, что пакеты не дошли, или потому, что сервер был занят и не успел ответить, — клиент не знает. Считать любой таймаут сетевой блокировкой — значит искать проблему в файрволе, который, возможно, ни при чём. Сначала сопоставьте таймаут с состоянием сервера в тот же момент.

Практичный способ проверки версий — собрать минимальную пару. Попросите одного игрока убедиться, что его клиент обновлён, и попробуйте зайти самим с заведомо актуального клиента. Если вход с актуального клиента работает, а у части игроков нет, виновата не сеть и не сервер, а отставшие клиенты. Если не работает даже у вас, версия клиента, скорее всего, ни при чём, и дерево ведёт дальше.

Загрузка сохранения и сетевой доступ — две разные задачи

Теперь нужно развести ещё два предположения, которые легко склеить: «сервер не читает мир» и «сервер недоступен по сети». Внешне они похожи, потому что и там и там игрок остаётся за дверью. Но признаки у них разные.

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

Эта развилка нужна ради одного практического вывода: ошибка загрузки сохранения не повод удалять сохранение. Соблазн велик: «сервер не стартует, давайте начнём с чистого листа». Но чистый старт ничего не диагностирует и уничтожает единственную ценность. Сначала нужно сделать копию каталога с данными мира и держать её отдельно от рабочей. Дальше можно экспериментировать сколько угодно, включая запуск нового пустого мира в другом каталоге для проверки, стартует ли сам сервер.

Это и есть самая полезная диагностическая техника здесь: запустить сервер на свежем каталоге данных. Если пустой мир загружается и клиенты входят, значит, версия, сеть и параметры в порядке, а проблема в самом старом мире. Если и пустой мир не стартует или не пускает игроков, ваш прежний мир ни при чём, и его трогать не нужно вообще. Один такой тест разделяет две большие гипотезы и при этом ничем не рискует, пока оригинал лежит нетронутым.

Сохранить мир перед любыми опытами

Прежде чем менять что-либо ещё, зафиксируйте состояние. Если сервер жив, команда /Save сохраняет мир (см. команды администратора). Для остановки сервера документация различает два пути: /Shutdown позволяет предупредить игроков и отложить остановку, а /DoExit означает принудительную остановку. Для диагностики разумнее первый путь: сначала /Save, затем штатная остановка с предупреждением. Принудительное завершение стоит оставлять на случай, когда сервер не реагирует, потому что оно не оставляет игрокам и самому миру времени на аккуратное закрытие.

Ещё одна деталь: параметр bIsUseBackupSaveData включает копии мира, но, как сказано в документации по настройкам, увеличивает нагрузку на диск. Если вы его включили после обновления и сервер стал заметно медленнее при входе, это стоит учитывать при разборе таймаутов: возможно, дело в диске, а не в сети. Но отключать резервные копии ради эксперимента, не имея собственных, не стоит: сначала сделайте свою копию каталога вручную.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации Россия, США, Франция и Великобритания. Оплата картой РФ и по СБП.

АРЕНДОВАТЬ СЕРВЕР

Параметры запуска и файл настроек: что могло измениться

Если версии совпадают, а мир ни при чём, остаются параметры. После обновления у вас может быть старый файл настроек, старая командная строка и новая версия сервера, которая относится к ним иначе. Здесь работает правило: сверяйтесь с документацией той версии, которую запускаете, а не с памятью и не со старыми инструкциями.

Правите ли вы нужный файл

Частая ловушка — редактирование не того файла. По документации по настройкам, изменять нужно Pal/Saved/Config/LinuxServer/PalWorldSettings.ini либо соответствующий файл в каталоге WindowsServer. Правка DefaultPalWorldSettings.ini сама по себе настройки не применяет. Это объясняет классическую историю: человек долго меняет значения, перезапускает сервер, ничего не происходит, и он делает вывод, что обновление «сломало» настройки. На деле сервер читал другой файл всё это время.

Проверка простая: убедитесь, что вы правите файл в каталоге платформы, соответствующей вашей ОС, а не шаблон по умолчанию. И после правки перезапустите сервер штатным путём: сначала /Save, затем остановка с предупреждением.

Устаревшие параметры доступа

Особо опасны параметры, которые менялись между версиями. По документации, CrossplayPlatforms задаёт разрешённые платформы, а прежний AllowConnectPlatform помечен недоступным в текущей документации. Если в вашем старом файле остался AllowConnectPlatform, он, вероятно, больше не выполняет то, что вы от него ожидаете. Следствие понятно: игроки с некоторых платформ могут не входить не из-за сети, а из-за того, что список разрешённых платформ задан не тем параметром или не так, как вы думали.

Это хороший пример к таблице выше: сценарий «входят одни, не входят другие» нередко объясняется именно платформами, а не версиями клиентов. Сопоставьте, на какой платформе играют вошедшие и не вошедшие. Если не входят все с одной платформы, смотрите значение CrossplayPlatforms.

Порт: что именно вы меняли

Отдельная история — порты. В документации по параметрам запуска различаются два понятия: -port меняет порт прослушивания, а publicport предназначен для объявления адреса community server и сам порт прослушивания не меняет. Разница принципиальна. Если вы поменяли только publicport, сервер продолжит слушать прежний порт, а игроки будут получать объявленный адрес, по которому никого нет. Если поменяли -port, но не открыли новый порт в файрволе или в панели хостинга, сервер слушает, но снаружи до него не достучаться.

Для диагностики здесь полезно мысленно разделить три вопроса: на каком порту сервер слушает на самом деле, какой порт объявлен игрокам, какой порт открыт между игроком и сервером. Эти три числа должны совпадать по смыслу. Если сервер слушает один порт, объявлен другой, а открыт третий, соединение не состоится, причём никакое «обновление» тут не виновато: просто параметры, ранее совпадавшие случайно, разъехались.

Старые параметры производительности

Ещё один кандидат — набор, который многие переносили из версии в версию по привычке. В документации для v1.0+ сказано, что старый набор useperfthreads, NoAsyncLoadingThread и UseMultithreadForDS может не улучшать производительность, а его отсутствие иногда лучше (параметры запуска). Из этого не следует, что набор ломает вход. Но он входит в число вещей, которые стоит убрать из командной строки при сравнении с чистым запуском: если сервер без них стартует так же или лучше, лишнее больше не нужно. Это нейтральная проверка: вы не отключаете функцию, а возвращаетесь к минимальной конфигурации.

Исходный набор как точка сравнения

Самая сильная техника в этой диагностике — сравнение с эталоном. Эталон — это минимальный набор: свежая копия сервера нужной версии, настройки по умолчанию в правильном файле, командная строка без лишних параметров, отдельный пустой каталог мира. Если такой сервер запускается и пускает клиента, у вас появляется опорная точка. Дальше вы возвращаете свои настройки по одной, и первая же, после которой вход пропадает, и есть виновник.

Практически это выглядит так. Рядом с рабочим каталогом вы создаёте второй, чистый. Запускаете из него сервер на другом порту, чтобы не конфликтовать с основным. Проверяете вход. Затем копируете в него изменённый файл настроек и снова проверяете. Потом добавляете параметры командной строки, один за другим. Метод медленнее, чем «поменять всё и перезапустить», зато он даёт ответ, а не догадку. И он безопасен для мира: ваш основной каталог остаётся нетронутым, а копию мира вы подключаете к чистому серверу в самую последнюю очередь.

Если вы используете арендованный сервер, такое сравнение удобно делать там, где достаточно ресурсов, чтобы временно поднять второй экземпляр рядом с основным. У VPS MAATRIX есть root-доступ, NVMe-диск и процессоры AMD EPYC, а в публичном предложении перечислены локации UK, US, RU и FR. Тарифы начинаются с Ba (1 vCPU, 2 ГБ RAM, 40 ГБ NVMe) и доходят до Djed (16 vCPU, 32 ГБ RAM, 320 ГБ). Эти ресурсы — отправная точка для вашего собственного теста, а не обещание числа игроков: хватит ли места на второй экземпляр и мир, покажет только пробный запуск. Если же свободных ресурсов мало, второй экземпляр можно запускать после остановки основного, на другом порту, и только на время проверки.

Если вы ещё только настраиваете сервер или хотите свериться со стандартной последовательностью установки, пригодится статья о том, как установить и настроить Palworld на VPS: она помогает собрать тот самый чистый эталон.

Дерево решений целиком

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

  1. Процесс не запущен или падает. Читайте последние строки журнала. Упоминание настроек ведёт к проверке файла и параметров, упоминание данных мира — к сохранению, нехватка памяти — к ресурсам.
  2. Процесс жив, но /Info не отвечает. Вероятно, идёт загрузка. Подождите и наблюдайте нагрузку. Если нагрузка спала, а ответа нет — смотрите журнал.
  3. Сервер отвечает, но входят не все. Сравните версии клиентов и платформы вошедших и не вошедших; проверьте CrossplayPlatforms и убедитесь, что в файле нет устаревшего AllowConnectPlatform.
  4. Сервер отвечает, не входит никто. Проверьте, какой порт слушает сервер, какой объявлен через publicport и какой открыт для подключений.
  5. Вход начинается и обрывается по таймауту. Сопоставьте момент таймаута с нагрузкой на диск и процессор; учтите, включены ли копии мира.
  6. Причина всё ещё не ясна. Запустите чистый сервер на отдельном каталоге и добавляйте изменения по одному.

Обратите внимание, что ни в одном пункте нет слов «удалить сохранение» или «переустановить всё». Это не случайность: ни один из симптомов не доказывает, что мир повреждён. Даже если окажется, что проблема именно в мире, у вас будет копия, и вы будете работать с ней, а не с единственным экземпляром.

Условный пример разбора

Представим вымышленную ситуацию, чтобы показать ход рассуждения; это не отчёт о реальном случае. После обновления сервера игроки жалуются на «нет соединения». Администратор открывает журнал: процесс запущен, мир загружен. Команда /Info отвечает. Значит, первая ветка пройдена: сервер дошёл до готовности.

Дальше администратор спрашивает, входят ли все одинаково. Выясняется, что не входит никто. Версии клиентов у нескольких игроков совпадают с версией сервера. Тогда остаётся порт. В командной строке стоит publicport с новым значением, а -port не менялся. Сервер слушает прежний порт, а игрокам объявляется другой. Администратор приводит оба значения в соответствие и убеждается, что нужный порт открыт. Игроки входят.

Обратите внимание, чем закончился разбор: единственная причина найдена, мир при этом ни разу не пересоздавался, игровой прогресс на месте. Если бы вместо этого администратор начал с удаления сохранения «для чистоты», он бы потерял всё и всё равно остался с неправильным портом: вход не заработал бы и на новом мире.

Когда дерево привело к одному участку

Ценность такой диагностики не в том, что она быстрее, а в том, что она заканчивается конкретным местом. «Не заходит» превращается в «сервер готов, версии совпадают, платформы разрешены, но объявленный порт не тот, что слушает процесс». Это формулировка, с которой можно работать: изменить один параметр, проверить, зафиксировать. Остальное остаётся как было.

Прежде чем закрыть тему, сделайте две вещи. Сохраните рабочую конфигурацию отдельным файлом с датой, чтобы при следующем обновлении у вас был собственный эталон, а не память о том, что вы когда-то меняли. И сделайте копию каталога мира после того, как вход восстановлен: теперь она заведомо соответствует рабочему состоянию. Следующее обновление станет менее тревожным: вы будете знать, какие параметры стоят, какие версии совпадают и где лежит мир, который вы ни разу не поставили под угрозу.