RE:NODE

Provoz11 min čtení

Startovací parametry herních serverů podle hry

Co dělají spouštěcí přepínače herního serveru: styly -flag, +convar a ?option, startovací proměnné v panelu a reálné příkazové řádky pro Source, Unity, Unreal a Javu.

1 čtenář

Startovací parametry jsou argumenty na příkazové řádce, kterou se herní server spouští: jaký svět načíst, na kterém portu naslouchat, kolik paměti použít, jaké mody načíst a kam zapisovat logy. Některé hry se konfigurují téměř výhradně takhle (Valheim nemá konfigurační soubor vůbec), jiné používají příkazovou řádku jen pro to nejnutnější a zbytek mají v konfiguračním souboru. Syntaxe se liší podle enginu - -flag value pro Unity a hry od Bohemie, +convar value pro Source a Rust, ?Option=Value pro Unreal, --option pro Factorio. V panelu tu řádku málokdy píšeš ručně: skládá se ze šablony a proměnných na záložce Startup. Když víš, v co se šablona změní a které přepínače ve tvé hře něco znamenají, opravíš server, který nenastartuje nebo nedělá to, co říkají jeho nastavení.

Tento článek vysvětluje jednotlivé syntaxe, jak se startovací proměnné z panelu mění v příkazovou řádku, jak vypadají reálné spouštěcí řádky pro běžné hry, co vyhraje, když se přepínač a konfigurační soubor rozcházejí, a které chyby způsobují většinu selhání při startu.

Startovací parametry versus konfigurační soubory#

Nastavení herního serveru může žít na dvou místech a vyplatí se vědět, co která hra kam ukládá.

  • Příkazová řádka se čte jednou, při startu procesu. Typicky v ní jsou věci, které server potřebuje dřív, než si může přečíst cokoli jiného: port, svět nebo save k načtení, cesta ke konfiguračnímu souboru, velikost paměti, seznam modů.
  • Konfigurační soubory se čtou až po startu, často znovu při změně mapy nebo příkazem pro reload. Obsahují dlouhý seznam herních nastavení.

Rozdělení se hra od hry liší. Valheim má všechno na příkazové řádce. Minecraft tam kromě paměti a jaru nemá skoro nic a zbytek drží v server.properties. Hry na Source přijmou téměř libovolnou konzolovou proměnnou oběma způsoby. DayZ a Arma 3 berou na příkazové řádce cestu ke konfiguračnímu souboru, port a seznam modů a vše ostatní má v .cfg. Než nastavení změníš, zjisti, kde ho hra čeká - hodnota na špatném místě není chyba, prostě se tiše ignoruje.

Čtyři syntaxe#

StylPříkladPoužívá
-flag value nebo -flag=value-port=2302, -batchmodeUnity, Bohemia (Arma, DayZ), volby Javy, Valheim
+command value+map de_inferno, +server.port 28015Source engine, Rust, FiveM
?Option=ValueTheIsland?listen?MaxPlayers=20URL map v Unreal Engine
--long-option value--start-server saves/world.zipFactorio a další běžné linuxové programy

Předpona + ve Source a Rustu má konkrétní význam: při startu spustí příkaz konzole nebo nastaví konzolovou proměnnou, přesně jako kdyby ses ji zadal do konzole serveru. Volba s - je spouštěcí volba, kterou čte engine ještě před tím, než konzole existuje. Takže ve hře na Source -port 27015 nastaví síťový port při startu enginu a +map de_dust2 je příkaz konzole map de_dust2 zadaný ve chvíli, kdy je engine připravený. Špatná předpona je častý důvod, proč parametr nedělá nic.

Volby s ? v Unrealu se připojují k prvnímu argumentu, tedy k mapě, bez mezer: MapName?listen?Port=7777. Samostatné přepínače -Option=Value následují za mezerou. Mnoho her na Unrealu přijímá některá nastavení na obou místech, ale dokumentuje jen jedno.

Jak panel skládá příkazovou řádku#

V panelu postaveném na Pterodactylu je každá hra definovaná eggem, který obsahuje šablonu startovacího příkazu. Šablona používá zástupné symboly ve dvojitých složených závorkách a panel je vyplní z proměnných zobrazených na záložce Startup a z hodnot, které nastaví sám systém.

A Paper egg's startup template, simplified
java -Xms128M -Xmx{{SERVER_MEMORY}}M -jar {{SERVER_JARFILE}} nogui

Při startu serveru se {{SERVER_JARFILE}} změní na to, co je uvedeno na záložce Startup, třeba server.jar, a zbytek se doplní z vlastních proměnných prostředí systému:

ProměnnáOdkud se bereVýznam
SERVER_MEMORYLimit paměti tarifuV megabajtech
SERVER_PORTPrimární přidělený portPort, na kterém má hra naslouchat
SERVER_IPAdresa primárního přiděleníV kontejneru často 0.0.0.0
Proměnné egguZáložka StartupCokoli, co egg definuje: název světa, větev, heslo

Autoři eggů rozhodují, které proměnné uživatel uvidí a které smí měnit. Proměnná, která je vidět, ale nejde upravit - typicky port - je nastavená hostingem, protože její změna by rozbila mapování mezi kontejnerem a vnějším světem. Další porty přidané na záložce Network se nepoužijí automaticky: hra na nich naslouchá, jen když jí to řekne proměnná, přepínač nebo její konfigurační soubor, a proto čerstvě přidaný query nebo RCON port většinou potřebuje ještě jedno nastavení. Které porty která hra potřebuje, popisuje Porty herních serverů vysvětleně.

Na RE:NODE je na záložce Startup vidět herní a systémové proměnné serveru a hesla jako admin a RCON se generují pro každý server zvlášť při jeho sestavení. Jak eggy fungují obecně, najdeš v článku Panel Pterodactyl vysvětlený.

Spouštěcí řádky podle enginu#

Java: Minecraft a proxy

bash
$ java -Xms4G -Xmx4G -XX:+UseG1GC -jar paper.jar --nogui

Všechno před -jar je volba pro virtuální stroj Javy: velikost haldy, garbage collector, systémové vlastnosti. Všechno za názvem jaru je argument pro samotný server. Když dáš volbu JVM za jar nebo argument serveru před něj, bude ignorovaná nebo odmítnutá. nogui i --nogui vypnou staré okno serveru; na serveru bez displeje by se stejně nebylo kde zobrazit. Velikosti haldy a přepínačům collectoru se věnuje samostatný článek Přepínače JVM pro Minecraft a verze Javy.

Unity: Valheim, Rust, 7 Days to Die, Unturned

Téměř každý server na Unity se spouští s -batchmode (žádné interaktivní okno ani vstup) a -nographics (žádné grafické zařízení), plus -logFile <path>, který určuje, kam jde výstup. Za nimi následují volby samotné hry:

bash
$ ./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/MyServer

Rust ukazuje konvenci + ze Source na enginu Unity: každý argument +server. a +rcon. je konzolová proměnná. +InternetServer/MyServer u Unturned pojmenovává složku serveru pod Servers/, kde zbytek drží jeho vlastní Commands.dat. Kompletní tabulku přepínačů Valheimu má Průvodce dedikovaným serverem pro Valheim.

Unreal Engine: Palworld, The Isle, Abiotic Factor, Satisfactory

bash
$ ./PalServer.sh -port=8211 -players=32 -useperfthreads \    -NoAsyncLoadingThread -UseMultithreadForDS

Palworld u tří přepínačů pro vlákna uvádí, že zlepšují výkon na vícejádrových strojích, -port a -players jsou samozřejmé a -publiclobby je přepínač, který server zařadí do seznamu komunitních serverů. Většina jeho herních nastavení vůbec nejsou přepínače, ale žijí v PalWorldSettings.ini. Ostatní servery na Unrealu mají stejný tvar: URL mapy s volbami ?, potom -Port=, -QueryPort=, -log a přepínače specifické pro hru. Autoritou je dokumentace každé hry, protože dvě hry na Unrealu spolu sdílejí málokdy víc než vlastní přepínače enginu.

Source engine: CS2, TF2, Garry's Mod, CS 1.6

bash
$ ./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 pojmenovává složku hry (tf, garrysmod, cstrike). -console zapne textovou konzoli. +game_type a +game_mode společně vybírají režim CS2 - 0 a 1 je competitive, 0 a 0 casual, 1 a 2 deathmatch. -tickrate, známý z návodů pro CS:GO a Counter-Strike: Source, na CS2 nedělá nic, protože ten běží na pevných 64 ticích se sub-tick vstupem. Specifika CS2 jsou v článku Příkazy a cvary serveru CS2.

Bohemia: Arma 3 a DayZ

bash
$ ./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

Seznam modů je oddělený středníky a záleží na pořadí: závislosti jako první. -serverMod načítá mody, které potřebuje server, ale klienti ne. -profiles určuje, kam půjdou logy a soubor RPT. Jediná chybějící složka @ uvedená v -mod server zastaví, takže tento parametr je první podezřelý, když server od Bohemie po změně modů spadne.

Všechno ostatní

bash
# 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

Paměť Project Zomboidu není na příkazové řádce; je to hodnota -Xmx uvnitř ProjectZomboid64.json, kterou čte startovací skript. +exec server.cfg ve FiveM spouští konfigurační soubor jako příkazy konzole, a proto je server.cfg psaný jako seznam příkazů, ne dvojic klíč-hodnota - viz FiveM server.cfg vysvětlený.

Když se příkazová řádka a konfigurační soubor rozcházejí#

Když se stejné nastavení objeví na obou místech, vyhrává to, které se aplikuje jako poslední, a to nemusí být vždy příkazová řádka.

  • Hry na Source spouštějí server.cfg při načtení mapy, tedy až po zpracování příkazové řádky. +sv_password na příkazové řádce proto přepíše řádek sv_password v server.cfg, a to při každé změně mapy.
  • Rust čte při startu také server/<identity>/cfg/server.cfg, takže konvar nastavený tam i na příkazové řádce má dva zdroje a hádat, který skončí v platnosti, nemá smysl. Vyber jeden.
  • Valheim nemá s čím se rozcházet: příkazová řádka je konfigurace.
  • Hry na Unrealu se liší. Některé berou hodnoty z příkazové řádky přednostně před ini, jiné naopak a některé u určitých nastavení jeden zdroj ignorují. Otestuj to na hodnotě, kterou uvidíš v prohlížeči serverů.

Bezpečný zvyk je mít každé nastavení právě na jednom místě. Pokud port a heslo nastavují startovací proměnné panelu, smaž tyto řádky z konfiguračního souboru, místo abys je držel „v synchronizaci“.

Paměťové přepínače a limit kontejneru#

Paměťové přepínače spolu s limitem tarifu fungují způsobem, který lidi překvapuje. Kontejner má pevný strop paměti; -Xmx Java serveru je jen halda a JVM potřebuje paměť i mimo haldu pro vlastní kód, vlákna, buffery a nativní knihovny. Nastavíš-li -Xmx na celý tarif, nezbyde místo na tuto režii a proces je při zátěži ukončen limitem.

Bezpečné pravidlo pro Java servery je halda zhruba 85-90 % kontejneru u větších tarifů a o něco méně u malých, kde je pevná režie větším podílem. Servery na Unity a Unrealu nemají ekvivalentní přepínač; jejich paměť je tolik, kolik hra potřebuje, a jedinou pákou jsou nastavení samotné hry.

Na RE:NODE se server, který dosáhne limitu paměti, zastaví a čistě znovu spustí, místo aby swapoval, takže předimenzovaná halda se projeví jako nevysvětlené restarty, ne jako pomalý server. Příznaky, na které se zaměřit, uvádí Proč se tvůj herní server pořád restartuje.

Tajné údaje na příkazové řádce#

Hesla, hesla RCON, tokeny herních serverů Steamu a licenční klíče často končí jako startovací parametry. Funguje to, ale se třemi upozorněními:

  • Logy je opakují. Mnoho her vypisuje při startu celou příkazovou řádku, takže heslo je v každém souboru logu. Před sdílením logu ho odstraň.
  • Vidí je i ostatní uživatelé panelu. Kdokoli s oprávněním zobrazit záložku Startup vidí hodnoty. Moderátorům dej přístup ke konzoli, ne ke startovacím parametrům.
  • Jména jsou veřejná. Valheim odmítne nastartovat, když se heslo objeví v názvu serveru, a to z dobrého důvodu - název je ve veřejném seznamu.

Tam, kde hra dovolí uložit tajný údaj do konfiguračního souboru, je to často lepší místo; kde ne, ber startovací proměnné jako citlivé. Obecné postupy popisuje Proměnné prostředí a tajné údaje.

Řešení potíží se startovací řádkou#

Chyby způsobené parametry jsou charakteristické:

  • Server ignoruje nastavení. Špatná předpona (- tam, kde mělo být +), špatné místo (příkazová řádka pro nastavení, které hra čte jen z konfigurace) nebo konfigurační soubor, který ho později přepíše.
  • „Unknown option“ nebo server vypíše nápovědu a skončí. Překlep, případně volba z jiné hry nebo ze starší verze. Factorio i Java to dělají.
  • Svět se resetuje na nový. Název světa, savu nebo identity v parametrech neodpovídá složce na disku, takže server vytvořil čerstvý.
  • Argumenty se rozdělí na špatném místě. Hodnota s mezerou, například název serveru, bez uvozovek. -name Longship Crew předá Crew jako samostatný, nic neříkající argument.
  • Port už je používaný. Hra dostane od příkazové řádky jeden port a od konfigurace jiný a pokusí se otevřít oba, nebo druhý server převzal řádku od prvního.
  • Mod se nenašel. Cesty v -mod u Bohemie jsou relativní ke složce serveru a na Linuxu rozlišují velikost písmen. @ace a @ACE jsou dvě různé složky.

Když se po změně startu server chová divně, přečti si úplně první řádky konzole. Většina serverů vypíše parametry, které dostala, a porovnání tohoto řádku s tím, co jsi zamýšlel, většinu těchto problémů odhalí za pár sekund. Na co se dívat, shrnuje Jak číst konzoli serveru.

FAQ#

Co dělají startovací parametry na herním serveru?

Jsou to argumenty, se kterými se server spouští: port, svět, paměť, umístění konfiguračního souboru, seznam modů, cesta k logům. Některé hry se konfigurují výhradně jimi; většina je používá pro to nejnutnější a zbytek čte z konfiguračního souboru.

Jaký je rozdíl mezi - a + ve spouštěcích volbách?

Ve hrách na Source a v Rustu čte volby s - engine při startu, zatímco argumenty s + jsou příkazy nebo proměnné konzole spuštěné ve chvíli, kdy je server připravený. Špatná předpona obvykle znamená, že se nastavení tiše ignoruje.

Proč můj server ignoruje nastavení, které jsem dal do startovací řádky?

Buď hra čte toto nastavení jen z konfiguračního souboru, nebo ho konfigurační soubor později nastaví znovu a přepíše příkazovou řádku. Drž každé nastavení na jednom místě a podle prvních řádků konzole zkontroluj, co server skutečně dostal.

Můžu si v panelu přidat vlastní přepínače?

Záleží na eggu: mnoho z nich nabízí proměnnou typu „další argumenty“, jiné jen proměnné, které definovali jejich autoři. Kde se samotný startovací příkaz upravit nedá, je pro další nastavení obvykle správným místem konfigurační soubor hry.

Má být Xmx stejné jako paměť mého tarifu?

Ne. Java potřebuje paměť i mimo haldu, takže halda rovná celému limitu nechává procesu bez místa na zbytek. Nech zhruba 10-15 % rezervu, u malých tarifů víc.


Komentáře

Zcela anonymně: žádný účet, žádný e-mail, žádné cookie. Ukládáme jen jméno, které napíšeš, text a čas - nic dalšího. Počet odkazů je omezený a značkování se nevykresluje.

0/2000