Unturned: сервер не запускается — диагностика
Запускаешь ServerHelper.sh или Unturned_Headless.x86_64, а консоль либо закрывается через секунду, либо зависает на загрузке карты и умирает без единого внятного сообщения. Для Unturned это особенно частая история, потому что сервер собирают своими руками через SteamCMD чаще, чем через готовые панели, — и любая мелочь на пути (недокачанный файл, занятый порт, забытый GSLT-токен) роняет запуск. Разбираем по порядку: сначала смотрим в лог, потом проходим стандартный набор виновников — от битой установки до конфигов.
Содержание
Сначала — лог, а не гадание
Прежде чем что-то переустанавливать, найди лог последнего запуска. У выделенного сервера Unturned он лежит в папке Logs рядом с исполняемым файлом:
<путь_к_серверу>/Logs/Server_<ServerID>.log — текущий/последний запуск
<путь_к_серверу>/Logs/Server_<ServerID>_Prev.log — предыдущий запуск (до рестарта)
<ServerID> — это то самое имя папки, которое ты указывал при запуске через +InternetServer/ServerID или +LanServer/ServerID. Если сервер только что упал, смотри именно _Prev.log — актуальный файл может быть создан заново пустым при следующей попытке.
Открывай с конца, ищи строки с Exception, Error, Failed to, SteamAPI_Init() failed. Если лог вообще не создаётся или папка Logs пустая — это почти всегда значит, что до инициализации движка дело не дошло: либо файл не исполняемый, либо не хватает библиотек, либо путь запуска указан неверно. Про то, как в принципе читать логи и крэш-репорты игровых серверов и на что там смотреть в первую очередь, есть отдельный разбор: логи и крэш-репорты — как читать и искать причину.
Повреждённая установка через SteamCMD
Самая частая причина «не стартует» на практике — недокачанные или битые файлы после установки/обновления. Сервер Unturned ставится через SteamCMD под отдельным app id 1110390 (это ID инструмента дедика, не путать с 304930 — ID самой игры):
steamcmd +login anonymous \
+force_install_dir /home/steam/u3ds \
+app_update 1110390 validate \
+quit
Флаг validate заставляет SteamCMD пересчитать контрольные суммы всех файлов и докачать то, что отличается. Если загрузка когда-то прерывалась — обрыв соединения, закрытый терминал, кончившееся место на диске — без validate битые файлы так и останутся лежать, и сервер будет падать при старте без внятной причины в логе.
Если после validate ничего не изменилось, снеси папку установки полностью и скачай заново, не полагаясь на докачку:
rm -rf /home/steam/u3ds
steamcmd +login anonymous +force_install_dir /home/steam/u3ds +app_update 1110390 validate +quit
Отдельно проверь свободное место на диске — SteamCMD не всегда явно пишет о его нехватке, просто останавливает закачку на середине. На Debian/Ubuntu также убедись, что подключена 32-битная архитектура и стоит lib32gcc-s1 — без них сама SteamCMD и часть зависимостей Unturned не запустятся:
sudo dpkg --add-architecture i386
sudo apt update && sudo apt install -y steamcmd lib32gcc-s1
Про сам процесс установки и обновления игровых серверов через SteamCMD в целом, с типичными граблями — общий гайд: SteamCMD — установка и обновление игровых серверов. Пошаговая установка именно Unturned с нуля, включая структуру папок и первый запуск, расписана здесь: как поднять сервер Unturned.
Поднять сервер Unturned за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверGSLT и BattlEye: сервер стартует, но что-то не так
Отдельная категория проблем — сервер вроде бы поднимается, но ведёт себя неправильно, и причина не в установке.
Нет GSLT-токена. Начиная с обновления A6 Polaris Teaser, публичный сервер без GSLT (Game Server Login Token) считается «анонимным» — он либо не появляется в общем списке серверов внутри игры, либо Steam периодически обрывает его сессию. Получить токен можно на steamcommunity.com/dev/managegameservers, указав app id 304930 (ID самой игры Unturned). Токен вписывается отдельной строкой в Commands.dat:
GSLT ВАШ_ТОКЕН
Каждому серверу нужен свой отдельный токен — один и тот же ключ на два инстанса не назначить, второй сервер просто не сможет с ним подключиться к Steam.
BattlEye не поднялся. Серверы Unturned по умолчанию работают с включённым BattlEye. Если процесс BattlEye на хосте не смог стартовать (например, не хватает прав на запись в его рабочую папку, или сервис блокируется антивирусом на Windows-хосте), сам игровой процесс может подняться, но игроки будут получать ошибку при попытке подключиться, а в логе — молчание про сетевую часть. Проверь права на директорию сервера целиком, а не только на сам исполняемый файл.
Занятый или не проброшенный порт
Unturned использует связку из двух последовательных UDP-портов:
| Параметр | Значение по умолчанию | Назначение |
|---|---|---|
| Port | 27015/UDP | основной игровой трафик |
| Port + 1 | 27016/UDP | Steam query — список серверов, пинг, статус |
Оба порта задаются одной строкой Port 27015 в Commands.dat — второй порт сервер занимает автоматически как Port+1, отдельно его прописывать не нужно. Если порт уже занят (например, пробуешь поднять второй инстанс на той же машине с теми же настройками), в логе будет что-то вроде Failed to bind или Address already in use. Проверить занятость на Linux:
ss -ulnp | grep 27015
Если сервер стартует и не падает, но игроков всё равно нет — проблема не в запуске, а в проброс порта на файрволе или у хостера:
sudo ufw allow 27015:27016/udp
sudo ufw reload
Для нескольких серверов на одном IP разноси порты с шагом 2: 27015, 27017, 27019 и так далее, чтобы диапазоны Port/Port+1 не пересекались между инстансами. Подробный чек-лист по проверке проброса — в отдельной статье: порт не проброшен — как проверить и исправить.
Права доступа, CRLF в ServerHelper.sh и нехватка библиотек (Linux)
На Linux-хостах у Unturned встречается специфический баг, отдельный от прав доступа.
- Файл не помечен исполняемым. После распаковки архива или переноса файлов с правами
644вместо755скрипт просто откажется запускаться:
chmod +x ServerHelper.sh
- CRLF-окончания строк в самом скрипте. Если
ServerHelper.shбыл отредактирован или скопирован через инструмент, который сохраняет Windows-переносы строк (\r\n), при попытке запуска можно получить ошибку вроде/bin/bash^M: bad interpreter: No such file or directory. Лечится конвертацией в Unix-переносы:
sed -i -e 's/\r$//' ServerHelper.sh
SteamAPI_Init() failedв консоли или логе. Обычно означает, что бинарник не может найти нужные Steam-библиотеки — либо не хватает 32-битных зависимостей (см. раздел про SteamCMD выше), либо запуск идёт не из той рабочей директории, где лежит структура сервера.ServerHelper.shсам выставляетLD_LIBRARY_PATH, поэтому если ты запускаешьUnturned_Headless.x86_64напрямую в обход скрипта — воспроизведи те же переменные окружения вручную или запускай именно черезServerHelper.sh.
Если сервер поднят как systemd-сервис, отдельно проверь WorkingDirectory в unit-файле — он должен указывать ровно на папку установки, иначе процесс не найдёт конфиги и упадёт с той же ошибкой, что и при запуске из чужой директории:
[Service]
Type=simple
User=steam
WorkingDirectory=/home/steam/u3ds
ExecStart=/home/steam/u3ds/ServerHelper.sh +InternetServer/MyServer
Restart=on-failure
RestartSec=10
Про автозапуск и переживание перезагрузки хоста в целом — отдельная статья: автозапуск игрового сервера при перезагрузке хоста.
Битые конфиги: Commands.dat и Config.json
Commands.dat читается построчно при каждом запуске — строки с // игнорируются как комментарии. Синтаксис простой, но именно поэтому его легко сломать: лишний пробел в имени команды, кириллица в значении, где её не ждут, или дублирующаяся строка Port могут привести к тому, что сервер либо не поднимет нужный модуль, либо тихо использует значения по умолчанию. Открой файл и построчно сверь с рабочим примером:
Name [MAATRIX] Мой сервер
Map PEI
MaxPlayers 24
Owner 76561198012345678
Port 27015
GSLT ВАШ_ТОКЕН
Config.json, в отличие от Commands.dat, — обычный JSON, и здесь одной лишней запятой достаточно, чтобы парсер упал при старте, часто без явного указания, в каком файле проблема. Прогони его через валидатор перед тем, как копать дальше:
python3 -m json.tool Config.json
Если валидатор ругается — он покажет примерную строку. Частые причины: ручная правка в редакторе с «умными кавычками» вместо обычных, обрыв файла при копировании по FTP на середине записи, или добавленный параметр без запятой перед следующим полем. Если конкретную ошибку найти не получается — переименуй файл (не удаляй, сохрани как бэкап) и дай серверу сгенерировать чистый конфиг заново при следующем запуске, а нужные значения перенеси туда вручную. Помни и общее правило: редактировать конфиги нужно только при остановленном сервере — работающий процесс может перезаписать файл своими значениями при выключении и стереть правки.
Поднять сервер Unturned за пару минут
Готовый образ MAATRIX GAMES: NVMe, AMD EPYC, DDoS-защита, панель управления. Локации UK, US, RU. Оплата картой РФ, СБП или криптой.
Создать серверЧастые вопросы
Сервер запускается, но не виден в списке серверов внутри игры.
В девяти случаях из десяти это отсутствующий или неверный GSLT-токен — без него сервер считается анонимным. Проверь steamcommunity.com/dev/managegameservers и строку GSLT в Commands.dat.
Лог вообще не создаётся, даже пустой.
Значит, до инициализации движка дело не доходит: проверяй права на ServerHelper.sh, CRLF-переносы строк в самом скрипте и наличие 32-битных библиотек на Linux-хосте.
После обновления игры сервер перестал запускаться.
Первым делом прогони app_update 1110390 validate — после патча файлы дедика могли обновиться частично, особенно если апдейт прерывался.
SteamAPI_Init() failed — что это значит?
Обычно бинарник не находит нужные Steam-библиотеки или запущен не из рабочей директории сервера. Запускай строго через ServerHelper.sh, он сам выставляет нужные переменные окружения.
Сервер стартует локально, но падает как systemd-сервис.
Почти всегда дело в WorkingDirectory unit-файла — он должен указывать на папку установки, а не на домашний каталог пользователя.