Параметры запуска - это аргументы командной строки, которой запускается игровой сервер: какой мир загрузить, на каком порту слушать, сколько памяти использовать, какие моды загрузить и куда писать логи. Некоторые игры настраиваются почти целиком так (у Valheim вообще нет конфиг-файла), другие используют командную строку только для самого необходимого, а всё остальное держат в конфиг-файле, и синтаксис зависит от движка: -flag value у игр на Unity и игр Bohemia, +convar value у Source и Rust, ?Option=Value у Unreal, --option у Factorio. В панели вы редко набираете строку сами: она собирается из шаблона и переменных на вкладке Startup. Понимание того, во что превращается шаблон и какие флаги важны для вашей игры, - это то, что позволяет починить сервер, который не запускается или делает не то, что написано в его настройках.
В этой статье - синтаксисы, как переменные запуска в панели превращаются в командную строку, реальные строки запуска для распространённых игр, что побеждает, когда флаг и конфиг-файл расходятся, и ошибки, из-за которых случается большинство сбоев при запуске.
Параметры запуска и конфиг-файлы#
У каждого игрового сервера есть два места, где могут жить настройки, и полезно знать, что игра держит в каждом из них.
- Командная строка читается один раз, при старте процесса. Обычно в ней то, что нужно серверу до того, как он сможет прочитать что-либо ещё: порт, мир или сохранение для загрузки, путь к конфиг-файлу, объём памяти, список модов.
- Конфиг-файлы читаются после запуска, часто повторно при смене карты или по команде перезагрузки. В них длинный список игровых настроек.
Это разделение в разных играх разное. Valheim помещает всё в командную строку. Minecraft не помещает туда почти ничего, кроме памяти и jar, а остальное держит в server.properties. Игры на Source принимают почти любую консольную переменную и так, и так. DayZ и Arma 3 берут из командной строки путь к конфиг-файлу, порт и список модов, а всё остальное - из .cfg. Прежде чем менять настройку, выясните, где игра её ожидает: значение не в том месте - это не ошибка, оно просто молча игнорируется.
Четыре синтаксиса#
| Стиль | Пример | Кто использует |
|---|---|---|
-flag value или -flag=value | -port=2302, -batchmode | Unity, Bohemia (Arma, DayZ), опции Java, Valheim |
+command value | +map de_inferno, +server.port 28015 | Движок Source, Rust, FiveM |
?Option=Value | TheIsland?listen?MaxPlayers=20 | URL карт Unreal Engine |
--long-option value | --start-server saves/world.zip | Factorio и другие обычные программы Linux |
Префикс + в Source и Rust имеет конкретный смысл: он выполняет консольную команду или задаёт консольную переменную при запуске, точно так же, как если бы её ввели в консоль сервера. Опция с - - это параметр запуска, который движок читает до того, как появится консоль. Так что в игре на Source -port 27015 задаёт сетевой порт во время старта движка, а +map de_dust2 - это консольная команда map de_dust2, которая выполняется, когда движок готов. Неверный префикс - частая причина того, что параметр ничего не делает.
Опции Unreal с ? дописываются к первому аргументу, карте, без пробелов: MapName?listen?Port=7777. Отдельные флаги -Option=Value идут после пробела. Многие игры на Unreal принимают некоторые настройки в обоих местах, а документируют только одно.
Как панель собирает командную строку#
В панели на базе Pterodactyl каждая игра описана egg, в котором есть шаблон запуска. В шаблоне используются заполнители в двойных фигурных скобках, и панель заполняет их переменными с вкладки Startup и значениями, которые система задаёт сама.
java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}} noguiПри запуске сервера {{SERVER_JARFILE}} становится тем, что указано на вкладке Startup, скажем server.jar, а остальное заполняется из собственных переменных окружения системы:
| Переменная | Откуда берётся | Значение |
|---|---|---|
SERVER_MEMORY | Лимит памяти тарифа | В мегабайтах |
SERVER_PORT | Основное выделение порта | Порт, на котором должна слушать игра |
SERVER_IP | Адрес основного выделения | Внутри контейнера часто 0.0.0.0 |
| Переменные egg | Вкладка Startup | Всё, что определяет egg: имя мира, ветка, пароль |
Авторы egg решают, какие переменные пользователь может видеть и какие может менять. Переменную, которая видна, но не редактируется, - обычный пример это порт - задаёт хостер, потому что её изменение сломало бы сопоставление между контейнером и внешним миром. Дополнительные порты, добавленные на вкладке Network, автоматически не используются: игра слушает их, только если ей об этом говорит переменная, флаг или конфиг-файл, поэтому только что добавленному порту query или RCON часто нужна ещё одна настройка. Какие порты нужны каждой игре, описано в статье порты игровых серверов простыми словами.
На RE:NODE на вкладке Startup хранятся игровые переменные и переменные окружения сервера, а пароли вроде админского и пароля RCON генерируются для каждого сервера при его создании. Как в целом устроены egg, рассказано в статье панель Pterodactyl простыми словами.
Строки запуска по движкам#
Java: Minecraft и прокси
$ java -Xms4G -Xmx4G -XX:+UseG1GC -jar paper.jar --noguiВсё до -jar - опции виртуальной машины Java: размер heap, сборщик мусора, системные свойства. Всё после имени jar - аргументы для самого сервера. Опция JVM после jar или аргумент сервера перед ним игнорируются или отклоняются. nogui и --nogui оба отключают старое окно сервера; на headless-хосте его всё равно негде показывать. Размер heap и флаги сборщика - отдельная тема, описанная в статье флаги JVM и версии Java для Minecraft.
Unity: Valheim, Rust, 7 Days to Die, Unturned
Почти каждый сервер на Unity запускается с -batchmode (без интерактивного окна и ввода) и -nographics (вообще без графического устройства), плюс -logFile <path>, чтобы задать, куда идёт вывод. Затем следуют собственные опции игры:
$ ./valheim_server.x86_64 -nographics -batchmode -name "Longship Crew" \ -port 2456 -world "Midgard" -password "herring-barrel-42" -crossplay$ ./RustDedicated -batchmode -logfile rust.log +server.port 28015 \ +server.level "Procedural Map" +server.seed 1234 +server.worldsize 4000 \ +server.maxplayers 100 +server.hostname "Example Rust" \ +server.identity "main" +rcon.port 28016 +rcon.password "change-me" +rcon.web 1$ ./7DaysToDieServer.x86_64 -logfile output_log.txt -quit -batchmode \ -nographics -configfile=serverconfig.xml -dedicated$ ./ServerHelper.sh +InternetServer/MyServerRust показывает соглашение с + в стиле Source на движке Unity: каждый аргумент +server. и +rcon. - консольная переменная. +InternetServer/MyServer в Unturned задаёт папку сервера внутри Servers/, где его собственный Commands.dat хранит всё остальное. Полная таблица флагов Valheim есть в руководстве по выделенному серверу Valheim.
Unreal Engine: Palworld, The Isle, Abiotic Factor, Satisfactory
$ ./PalServer.sh -port=8211 -players=32 -useperfthreads \ -NoAsyncLoadingThread -UseMultithreadForDSPalworld документирует три флага потоков как улучшающие производительность на многоядерных машинах, -port и -players - очевидные, а -publiclobby - переключатель, который показывает сервер в списке как сервер сообщества. Большинство игровых настроек Palworld - вовсе не флаги, они живут в PalWorldSettings.ini. Другие серверы на Unreal устроены так же: URL карты с опциями через ?, затем -Port=, -QueryPort=, -log и флаги конкретной игры. Последнее слово за документацией каждой игры, потому что у двух игр на Unreal редко бывает что-то общее, кроме флагов самого движка.
Движок Source: CS2, TF2, Garry's Mod, CS 1.6
$ ./cs2 -dedicated -port 27015 +map de_inferno +game_type 0 +game_mode 1 \ +sv_setsteamaccount <GSLT>$ ./srcds_run -game tf -console -port 27015 +map ctf_2fort \ +maxplayers 24 +sv_setsteamaccount <GSLT>$ ./srcds_run -game garrysmod -console -port 27015 +maxplayers 32 \ +gamemode sandbox +map gm_construct +host_workshop_collection <id>-game задаёт папку игры (tf, garrysmod, cstrike). -console даёт текстовую консоль. +game_type и +game_mode вместе выбирают режим CS2: 0 и 1 - соревновательный, 0 и 0 - обычный, 1 и 2 - deathmatch. -tickrate, знакомый по руководствам для CS:GO и Counter-Strike: Source, в CS2 ничего не делает: там сервер работает на фиксированных 64 тиках с sub-tick вводом. Особенности CS2 описаны в статье команды и cvars сервера CS2.
Bohemia: Arma 3 и DayZ
$ ./arma3server_x64 -port=2302 -config=server.cfg -cfg=basic.cfg \ -profiles=profiles -name=server -mod="@CBA_A3;@ace" -serverMod="@admintools"$ ./DayZServer -config=serverDZ.cfg -port=2302 -profiles=profiles \ -mod="@CF;@Community-Online-Tools" -dologs -adminlog -netlog -freezecheckСписок модов разделяется точкой с запятой, и порядок важен: сначала зависимости. -serverMod загружает моды, которые нужны серверу, но не клиентам. -profiles определяет, куда идут логи и файл RPT. Одна-единственная отсутствующая папка @, указанная в -mod, останавливает сервер, так что этот параметр - первый подозреваемый, когда сервер Bohemia падает после изменения модов.
Всё остальное
# Factorio$ ./bin/x64/factorio --start-server saves/world.zip \ --server-settings data/server-settings.json --port 34197# Terraria$ ./TerrariaServer -config serverconfig.txt -port 7777# Project Zomboid$ ./start-server.sh -servername main -adminpassword "change-me"# FiveM$ ./run.sh +exec server.cfg +set onesync onПамять Project Zomboid задаётся не в командной строке, а значением -Xmx внутри ProjectZomboid64.json, который читает скрипт запуска. +exec server.cfg в FiveM выполняет конфиг-файл как консольные команды, поэтому server.cfg написан как список команд, а не пар ключ-значение, - см. статью server.cfg FiveM простыми словами.
Когда командная строка и конфиг-файл расходятся#
Когда одна и та же настройка есть в обоих местах, побеждает та, что применена последней, и это не всегда командная строка.
- Игры на Source выполняют
server.cfgпри загрузке карты, то есть после обработки командной строки. Поэтому+sv_passwordв командной строке перезаписывается строкойsv_passwordвserver.cfgпри каждой смене карты. - Rust при запуске тоже читает
server/<identity>/cfg/server.cfg, так что у convar, заданной и там, и в командной строке, два источника, и угадывать, какой победит, не стоит. Выберите один. - Valheim не с чем расходиться: командная строка и есть конфигурация.
- Игры на Unreal ведут себя по-разному. Одни предпочитают значения из командной строки значениям из ini, другие наоборот, а третьи для отдельных настроек игнорируют один из источников. Проверяйте на значении, которое видно в браузере серверов.
Безопасная привычка - держать каждую настройку ровно в одном месте. Если переменные запуска в панели задают порт и пароль, удалите эти строки из конфиг-файла, а не держите их «синхронизированными».
Флаги памяти и лимит контейнера#
Флаги памяти взаимодействуют с лимитом тарифа так, что многих застают врасплох. У контейнера жёсткий потолок памяти; -Xmx сервера на Java - это только его heap, а JVM нужна память сверх heap для собственного кода, потоков, буферов и нативных библиотек. Если выставить -Xmx на весь тариф, на эти накладные расходы места не останется, и под нагрузкой процесс будет завершён по лимиту.
Безопасное правило для серверов на Java - heap примерно 85-90% от контейнера на больших тарифах и чуть меньше на маленьких, где фиксированные накладные расходы составляют большую долю. У серверов на Unity и Unreal аналогичного флага нет; их память - это сколько нужно игре, и единственный рычаг - собственные настройки игры.
На RE:NODE сервер, достигший лимита памяти, останавливается и перезапускается начисто, а не уходит в swap, так что слишком большой heap проявляется как необъяснимые рестарты, а не как медленный сервер. Какой признак искать, описано в статье почему игровой сервер постоянно перезапускается.
Секреты в командной строке#
Пароли, пароли RCON, токены игрового сервера Steam и лицензионные ключи часто оказываются параметрами запуска. Это работает, но с тремя оговорками:
- Логи их повторяют. Многие игры при запуске выводят полную командную строку, так что пароль оказывается в каждом файле лога. Удаляйте его, прежде чем делиться логом.
- Другие пользователи панели их видят. Любой, у кого есть право просматривать вкладку Startup, видит значения. Давайте модераторам доступ к консоли, а не к настройкам запуска.
- Имена публичны. Valheim отказывается запускаться, если пароль встречается в имени сервера, и не зря: имя видно в публичном списке.
Если игра позволяет хранить секрет в конфиг-файле, часто это место лучше; если нет, относитесь к переменным запуска как к конфиденциальным. Общая практика описана в статье переменные окружения и секреты.
Разбор проблем со строкой запуска#
Ошибки, вызванные параметрами, узнаваемы:
- Сервер игнорирует настройку. Неверный префикс (
-там, где нужен+), не то место (командная строка для настройки, которую игра читает только из конфига) или конфиг-файл, который позже её переопределяет. - «Unknown option» или сервер выводит справку и завершается. Опечатка или опция из другой игры либо старой версии. Так делают и Factorio, и Java.
- Мир сбрасывается на новый. Имя мира, сохранения или identity в параметрах не совпадает с папкой на диске, и сервер создал новый.
- Аргументы разбиваются не там. Значение с пробелом, например имя сервера, без кавычек.
-name Longship CrewпередаётCrewотдельным бессмысленным аргументом. - Порт уже занят. Командная строка говорит игре один порт, а конфиг - другой, и она пытается открыть оба, или второй сервер скопировал строку первого.
- Мод не найден. Пути в
-modу Bohemia задаются относительно папки сервера и в Linux чувствительны к регистру.@aceи@ACE- разные папки.
Когда изменение запуска ведёт себя странно, читайте самые первые строки консоли. Большинство серверов выводят полученные параметры, и сравнение этой строки с задуманным находит большинство таких ошибок за секунды. Что искать, описано в статье как читать консоль сервера.
FAQ#
Что делают параметры запуска на игровом сервере?
Это аргументы, с которыми запускается сервер: порт, мир, память, расположение конфиг-файла, список модов, путь к логам. Некоторые игры настраиваются целиком через них; большинство используют их для самого необходимого, а остальное читают из конфиг-файла.
Чем отличаются - и + в параметрах запуска?
В играх на Source и в Rust опции с - читает движок во время запуска, а аргументы с + - это консольные команды или переменные, которые выполняются, когда сервер готов. Неверный префикс обычно означает, что настройка молча игнорируется.
Почему сервер игнорирует настройку, которую я указал в строке запуска?
Либо игра читает эту настройку только из конфиг-файла, либо конфиг-файл позже задаёт её снова и переопределяет командную строку. Держите каждую настройку в одном месте и смотрите первые строки консоли, чтобы увидеть, что сервер на самом деле получил.
Можно ли добавить свои флаги в панели?
Зависит от egg: многие предоставляют переменную вроде «дополнительные аргументы», другие - только переменные, которые определили их авторы. Если саму команду запуска редактировать нельзя, место для дополнительных настроек - обычно конфиг-файл игры.
Должен ли Xmx совпадать с памятью тарифа?
Нет. Java нужна память сверх heap, так что heap, равный всему лимиту, не оставляет процессу места для остального. Оставляйте примерно 10-15% запаса, на маленьких тарифах больше.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.