Většina selhání SteamCMD má jednu z pěti příčin: přihlášený účet aplikaci nevlastní, disk je plný, uživatel nemůže zapisovat do složky, uprostřed stahování vypadla síť, nebo jsou data o aplikaci v cache Steamu zastaralá. Text chyby jednu z nich pojmenuje, ale obvykle tak, že ukazuje jinam. Tenhle článek bere hlášky, které lidé skutečně vyhledávají, vysvětluje, co každá znamená, a uvádí opravy v pořadí, v jakém se vyplatí je zkoušet. Předpokládá, že základní instalační příkaz už znáš. Pokud ne, SteamCMD vysvětlené popisuje app id, anonymní přihlášení, validate, beta větve a aktualizační skripty. Tenhle příspěvek je o tom, co dělat, když ten příkaz selže.
Jak číst selhání SteamCMD#
Neúspěšný app_update skončí jedním ze dvou druhů řádků a každý říká něco jiného.
ERROR! Failed to install app '896660' (Disk write failure)Error! App '896660' state is 0x202 after update job.První druh má v závorce důvod. Ten pochází přímo z obsahového systému klienta Steam a je to nejbližší věc diagnóze, jakou dostaneš. Druhý druh jen hlásí stav, ve kterém aplikace zůstala, jako hexadecimální sadu příznaků. Říká ti, že aktualizace se zastavila, ne proč. Obojí je rozebráno níže.
Než začneš cokoli měnit, zjisti tři věci:
- Celý výstup, ne jen poslední řádek. Posuň se nahoru. Přihlášení, které tiše selhalo, nebo varování o instalačním adresáři bývá o padesát řádků výš než chyba, kterou všichni citují.
- Volné místo a inody na svazku, na který instaluješ. Na Linuxu
df -h /srv/valheimadf -i /srv/valheim. Plná tabulka inodů způsobí stejnou chybu jako plný disk, přestožedf -hukazuje spoustu místa. - Komu patří instalační adresář a kdo spouští SteamCMD.
ls -ld /srv/valheimawhoami. Pokud se liší, pravděpodobně jsi problém našel.
SteamCMD si také vede vlastní logy ve svém adresáři Steam - na Linuxu obvykle ~/Steam/logs/, na Windows ve složce logs vedle steamcmd.exe. Soubor content_log.txt v ní zaznamenává každou aktualizační úlohu podrobněji než konzole, včetně toho, který soubor se nepodařilo zapsat. Přesné cesty se liší podle toho, jak byl SteamCMD nainstalován (balíček z distribuce používá jiný domovský adresář než tarball), takže soubor vyhledej, pokud není tam, kde ho čekáš.
Jedno nastavení mění, co uvidíš. Ve skriptu spuštěném přes +runscript způsobí @ShutdownOnFailedCommand 1, že se SteamCMD zastaví u první chyby. Bez něj po neúspěšném app_update následuje quit, proces skončí a obalový skript, který kontroluje jen návratový kód, ohlásí úspěch. Pokud o chybách zjišťují hráči dřív než ty, oprav nejdřív tohle. Zvyk hledat pomocí grep řádek Success! App 'X' fully installed. je vysvětlen v hlavním článku o SteamCMD a čtení konzole pokrývá obecnou dovednost oddělit příčinu od šumu.
Missing configuration#
ERROR! Failed to install app '90' (Missing configuration)Je to nejhledanější chyba SteamCMD a zároveň nejméně konkrétní. Znamená, že SteamCMD nezískal použitelnou konfiguraci pro danou aplikaci - informaci o tom, které depoty stáhnout pro tuto platformu a tohle přihlášení. Příčiny zhruba od nejčastější po nejvzácnější:
- Zastaralá cache informací o aplikaci. SteamCMD drží metadata každé aplikace ve složce
appcacheuvnitř svého adresáře. Když se tahle cache rozchází s tím, co Steam právě zveřejňuje, instalace selže dřív, než cokoli stáhne. - Špatné app id. Zadáš id hry tam, kam patří id nástroje dedikovaného serveru, nebo překlep skončí u nesouvisející aplikace.
- Přihlášení bez přístupu k té konfiguraci. Aplikace může hlásit tohle místo
No subscription, když přihlášení její konfiguraci nevidí. - Platforma bez depotů. Některé aplikace hlásí chybějící konfiguraci místo
Invalid platform, když pro tvůj operační systém prostě neexistuje build. - Něco přechodného na straně Steamu. Stává se to a opakování o deset minut později projde.
Opravy zkoušej popořadě:
- Spusť stejný příkaz znovu. Ne jako pověru - první běh, který obnovil cache informací o aplikaci, často napodruhé uspěje.
- Porovnej app id s id nástroje serveru, ne hry. Server Valheimu je
896660, hra je892970a nainstaluje se jen to první. - Zastav SteamCMD a smaž jeho složku
appcache(nesteamappsa ne svůj instalační adresář). Další běh ji postaví od nuly. - Zkus vynucenou platformu, pokud aplikace vychází jen pro jiný systém - viz níže.
- Pokud potřebuje účet, který ji vlastní, přihlas se s ním.
$ cd ~/steamcmd$ rm -rf appcache$ ./steamcmd.sh +force_install_dir /srv/hlds +login anonymous \ +app_update 90 validate +quitZvláštní případ Half-Life Dedicated Server
Aplikace 90 - starý server GoldSrc používaný Counter-Strike 1.6 a dalšími módy Half-Life - je pro tuto chybu proslulá. Je léta nespolehlivá a dlouhodobé řešení komunity spočívá v tom, že SteamCMD přes app_set_config řekneš, který mód chceš, a pak několikrát spustíš app_update 90 validate, dokud nehlásí úspěch:
$ ./steamcmd.sh +force_install_dir /srv/cs16 +login anonymous \ +app_set_config 90 mod cstrike \ +app_update 90 validate +app_update 90 validate +quitChování se v čase měnilo a liší se podle módu, takže to ber jako věc k vyzkoušení, ne jako záruku. Pokud potřebuješ jen běžící server CS 1.6, je připravená instalace méně bolestivá než boj s aplikací 90 - průvodce serverem Counter-Strike 1.6 popisuje, co server potřebuje, až jsou soubory na místě.
Invalid platform
ERROR! Failed to install app '556450' (Invalid platform)Tahle je jednoznačná: aplikace nemá build pro operační systém, na kterém SteamCMD běží. Typickým příkladem je dedikovaný server The Forest, protože vychází jen jako binárka pro Windows. Na Linuxu můžeš build pro Windows přesto stáhnout a spustit pod Wine:
@ShutdownOnFailedCommand 1@sSteamCmdForcePlatformType windowsforce_install_dir /srv/theforestlogin anonymousapp_update 556450 validatequitNastavení musí stát před app_update a platí pro zbytek toho běhu. Provozovat server pro Windows na Linuxu je samostatné rozhodnutí s vlastními náklady; Linux vs Windows herní servery uvádí, které hry to vyžadují.
No subscription#
ERROR! Failed to install app '223350' (No subscription)Jasnější, než to vypadá: přihlášená identita nemá licenci na danou aplikaci. Dojít k tomu lze třemi cestami.
- Anonymní přihlášení u aplikace, která ho odmítá. DayZ (
223350), Arma 3 (233780) a server Project Zomboid jsou běžné případy. Potřebuješ účet Steam, který hru vlastní. - Správný účet, špatná aplikace. Účet, který hru vlastní, ale instaluje něco, na co nemá licenci - často výsledek překlepu v id.
- Přihlášení, které se ve skutečnosti nestalo. Pokud krok
loginselhal, každý další příkaz běží jako nikdo a aplikace, která potřebuje vlastníka, hlásíNo subscription. Posuň se nahoru a hledej řádek přihlášení končícíOK.
Oprava spočívá v přihlášení účtem, který hru vlastní, poprvé interaktivně, aby šlo splnit Steam Guard, a pak tento účet používat dál ve skriptech. Použij záložní účet, který nedrží nic než tu hru: server je špatné místo pro uložení přihlašovacích údajů účtu, kterým nakupuješ.
U RE:NODE se hry, které vyžadují tvoje vlastní přihlášení do Steamu - mimo jiné Arma 3, DayZ, Project Zomboid a 7 Days to Die - vytvoří okamžitě a pak čekají na kartě Setup, až zadáš přihlašovací údaje. Ukládají se tak, jak je napíšeš, proto i tam platí rada o záložním účtu.
Disk write failure a Missing file permissions#
ERROR! Failed to install app '896660' (Disk write failure)ERROR! Failed to install app '896660' (Missing file permissions)Jsou to dvě různé hlášky pro překrývající se problémy a problém s oprávněními se může projevit kteroukoli z nich. Zkontroluj tyto čtyři věci v tomto pořadí:
| Kontrola | Příkaz nebo místo | Co pomáhá |
|---|---|---|
| Volné místo | df -h <dir> | Uvolni o 20-30% víc, než je velikost instalace |
| Volné inody | df -i <dir> | Smaž drobné soubory, staré logy |
| Vlastnictví | ls -ld <dir> | chown -R na uživatele SteamCMD |
| Připojení jen pro čtení | mount, log jádra | Oprav souborový systém, pak spusť validate |
Místo je nejčastější příčina a je méně zřejmé, než zní. SteamCMD ukládá stažené bloky na stejném svazku, než je potvrdí, takže aktualizace potřebuje místo pro změněné soubory navíc k existující instalaci. Disk s 2 GB volného místa může selhat u aktualizace o velikosti 1,5 GB. Disk obvykle plní starý obsah z Workshopu, výpisy pádů a rotované logy; co dělat, když je disk plný obsahuje seznam úklidu.
Vlastnictví je druhé. Klasická cesta je spustit SteamCMD jednou jako root, „aby to fungovalo“, což zanechá soubory vlastněné rootem, které uživatel služby při další aktualizaci nemůže nahradit. Oprav to jednou provždy:
$ sudo chown -R steam:steam /srv/valheim /home/steam/steamcmd$ sudo -u steam /home/steam/steamcmd/steamcmd.sh \ +force_install_dir /srv/valheim +login anonymous \ +app_update 896660 validate +quitPak ho už nikdy nespouštěj jako root. Oprávnění a vlastnictví souborů probírá obecný případ, včetně serverů, které zapisují soubory jako jiný uživatel, než který instaluje.
Na Windows bývá příčinou instalační adresář pod C:\Program Files bez zvýšených práv, soubor zamčený proto, že server stále běží, a antivirus, který uprostřed aktualizace dá do karantény právě zapsaný spustitelný soubor. Před aktualizací server zastav, instaluj mimo Program Files a vyluč instalační adresář ze skenování v reálném čase, pokud selhání vždy padají na soubory .exe a .dll.
Stavové kódy: 0x202, 0x402, 0x602 a další#
Error! App '740' state is 0x602 after update job.Hexadecimální číslo je sada příznaků popisujících stav aplikace, sečtených dohromady. Když víš, co bity znamenají, z tajemného kódu se stane obyčejná věta. Tyhle příznaky uvidíš v těchto chybách:
| Příznak | Význam |
|---|---|
0x2 | Vyžaduje aktualizaci |
0x4 | Plně nainstalováno |
0x200 | Aktualizace pozastavena |
0x400 | Aktualizace zahájena |
Kódy čti podle té tabulky:
- `0x202` = vyžaduje aktualizaci plus aktualizace pozastavena. Úloha se zastavila a aplikace aktualizaci stále potřebuje. V praxi je to převážně problém s místem na disku; než uděláš cokoli jiného, zkontroluj
df -h. - `0x402` = vyžaduje aktualizaci plus aktualizace zahájena. Úloha začala a nedokončila se. Obvyklou příčinou jsou přerušení sítě a timeouty.
- `0x602` = vyžadována, pozastavena a zahájena. Aktualizace se rozjela a pak se zastavila. Je to obecný stav „něco se pokazilo uprostřed aktualizace“: místo na disku, oprávnění, přerušené spojení nebo ukončený proces.
- `0x6` = vyžaduje aktualizaci u nainstalované aplikace, bez probíhající aktualizace. Obvykle se objeví, když úloha nikdy nezačala - hledej dříve ve výstupu selhání přihlášení nebo načtení informací o aplikaci.
Žádný z těchto kódů neobsahuje důvod. Proto jsou tři kontroly z úvodu této stránky - místo, vlastnictví, síť - odpovědí na všechny a proto stojí za to otevřít content_log.txt, když zjevné kontroly projdou.
Stejné příznaky jsou v manifestu aplikace uložené jako desítkové číslo. Otevři steamapps/appmanifest_<appid>.acf v instalačním adresáři a najdi StateFlags. Zdravá instalace má "StateFlags" "4". Cokoli jiného znamená, že SteamCMD považuje instalaci za nedokončenou, a správným krokem je další app_update s validate.
Řádky průběhu při stahování používají jinou sadu kódů, což lidi, kteří je hledají, mate:
Update state (0x5) verifying install, progress: 12.40 (512 / 4130) Update state (0x61) downloading, progress: 45.22 (1868 / 4130) Update state (0x101) committing, progress: 98.10 (4052 / 4130)Jsou to fáze, ne chyby. Číst je třeba slovo za kódem. Řádek průběhu, který během downloading minuty stojí na stejném čísle, značí problém s propustností sítě nebo disku; během committing nebo verifying na pomalém disku je to často prostě pomalé a přerušení je právě to, čím získáš 0x602.
Timeouty, selhání spojení a chyby přihlášení#
Problémy se sítí se projevují několika odlišnými způsoby.
SteamCMD se nedokáže aktualizovat. Při prvním spuštění nebo po dlouhé pauze zavaděč před čímkoli jiným zkontroluje vlastní aktualizaci. Pokud nedosáhne na obsahové servery Steamu, zastaví se tam se zprávou v duchu Steam needs to be online to update. Zkontroluj překlad DNS na hostiteli, odchozí HTTP a HTTPS přes případný firewall a proxy, pokud ji tvoje síť vyžaduje. Častým viníkem je hostitel s rozbitým směrováním IPv6, ale funkční cestou přes IPv4.
Přihlášení visí nebo selže. Řádek přihlášení končí OK nebo FAILED s důvodem. Ty, na které narazíš:
Logging in user 'spareaccount' to Steam Public...FAILED (Invalid Password)Logging in user 'spareaccount' to Steam Public...FAILED (Rate Limit Exceeded)Logging in user 'spareaccount' to Steam Public...FAILED (Two-factor code mismatch)Invalid Password je to, co říká, ale pokud jsi heslo zadal na příkazové řádce, zkontroluj, zda speciální znak nespolkl shell. Rate Limit Exceeded znamená příliš mnoho pokusů v krátké době; jediná oprava je přestat a počkat a každý další pokus okno prodlužuje. Two-factor code mismatch znamená, že kód Steam Guard byl špatný nebo vypršel, což se stane i tehdy, když se hodiny hostitele rozešly. Jedno ruční interaktivní přihlášení, jeho schválení a nechat SteamCMD uložit přihlašovací údaje do cache je způsob, jak se bezobslužné běhy všem třem vyhnou.
Stahování, která vyprší. Velké aktualizace aplikací se občas zaseknou a stahování z Workshopu vyprší mnohem častěji:
ERROR! Timeout downloading item 463939057Velké položky z Workshopu na pomalé lince běžně potřebují dva nebo tři pokusy. Než usoudíš, že je něco špatně, zkus stejnou položku znovu. Pokud stejná položka selhává pokaždé, smaž steamapps/workshop/appworkshop_<gameappid>.acf a složku té položky a stáhni ji znovu. Jiná zpráva, ERROR! Download item 463939057 failed (Failure)., spíš znamená, že položka je soukromá, odstraněná, nebo vyžaduje přihlášení vlastníkem. Mody ze Steam Workshopu na dedikovaných serverech pokrývá stranu Workshopu do hloubky.
Linux: 32bitové knihovny a steamclient.so#
SteamCMD na Linuxu je 32bitový program. Na čerstvém 64bitovém systému bez podpory 32 bitů je selhání matoucí, protože soubor, na který si stěžuje, zjevně existuje:
steamcmd.sh: line 38: /home/steam/steamcmd/linux32/steamcmd: No such file or directory„No such file“ se tu týká 32bitového zavaděče, který binárka potřebuje, ne binárky samotné. Další běžná podoba jmenuje knihovnu:
linux32/steamcmd: error while loading shared libraries: libstdc++.so.6:cannot open shared object file: No such file or directoryObě se opravují stejně:
# Debian and Ubuntu$ sudo dpkg --add-architecture i386$ sudo apt update$ sudo apt install lib32gcc-s1 # lib32gcc1 on older releases$ sudo apt install lib32stdc++6 # if libstdc++.so.6 is still missing# RHEL, Rocky, AlmaLinux$ sudo dnf install glibc.i686 libstdc++.i686Názvy balíčků se mezi vydáními distribucí mění, proto se návody rozcházejí. Pokud apt nenajde lib32gcc-s1, máš starší vydání, které se jmenuje lib32gcc1.
Související problém se objeví po úspěšné instalaci, když startuje herní server, ne SteamCMD:
[S_API FAIL] SteamAPI_Init() failed; unable to locate a running instanceof Steam, or a local steamclient.so.Herní server hledá steamclient.so v ~/.steam/sdk64/ (nebo sdk32 u 32bitového serveru) a nenachází ho. SteamCMD tuto knihovnu dodává ve svých složkách linux64 a linux32. Standardní oprava je propojit ji na místo:
$ mkdir -p ~/.steam/sdk64$ ln -sf ~/steamcmd/linux64/steamclient.so ~/.steam/sdk64/steamclient.soNěkteré servery místo toho čekají soubor vedle svého spustitelného souboru a jejich startovací skripty nastavují LD_LIBRARY_PATH, aby ho našly. Pokud to dělá startovací skript samotné hry, použij ho místo přímého spuštění binárky.
Zprávy, které můžeš ignorovat#
SteamCMD je upovídaný a několik řádků vypadá při každém běhu jako chyba, aniž by cokoli znamenaly. Když je znáš, ušetří ti to večer:
Redirecting stderr to '.../logs/stderr.txt'- informativní.ILocalize::AddFile() failed to load file "public/steambootstrapper_english.txt".- vypisuje se při prvních bězích, neškodné.dlmopen steamservice.so failed: steamservice.so: cannot open shared object file- SteamCMD to nepotřebuje; na Linuxu se vypisuje při každém běhu.Unable to determine CPU Frequency. Try defining CPU_MHZ.- kosmetické, běžné v kontejnerech a virtuálních strojích.Please use force_install_dir before logon!- tohle ignorovat nelze stejným způsobem. Současné buildy varují, kdyžforce_install_dirnásleduje pologin, a instalace nemusí skončit tam, kam jsi chtěl. Přesuň ho na začátek.
Pravidlo: pokud běh končí Success! App 'X' fully installed. nebo Success! App 'X' already up to date., řádky nad tím byly šum.
Kdy validate pomůže a kdy ne#
validate znovu spočítá hash každého souboru v instalaci proti manifestu Steamu a nahradí ty, které nesedí. Opraví:
- instalaci rozepsanou kvůli plnému disku, ukončenému procesu nebo přerušenému spojení - rodina
0x602; - server, který po „úspěšné“ aktualizaci padá při startu;
- soubory poškozené na disku.
Neopraví:
- nic ze seznamu výše o přihlášení, licencích, platformách nebo app id - běží až poté, co tyto kontroly projdou;
- disk, který je stále plný, nebo adresář, do kterého uživatel stále nemůže zapisovat;
- rozbitý mod, plugin nebo konfigurační soubor, který jsi přidal, protože ty v manifestu nejsou. Použij místo toho co dělat, když aktualizace modu něco rozbije;
- neshodu verzí s klienty. To je otázka větve, popsaná v zafixování verzí a návratech zpět.
Pamatuj také, že vrátí každý soubor, který přišel s aplikací, včetně startovacího skriptu nebo výchozí konfigurace, kterou jsi upravil přímo. Nech si kopii.
Když samotný validate na stejné aplikaci pořád selhává, poslední možností před čistou reinstalací je smazat v instalačním adresáři steamapps/appmanifest_<appid>.acf a spustit aktualizaci znovu. SteamCMD pak o instalaci nemá žádný záznam a stáhne vše znovu, přičemž soubory, které nejsou součástí aplikace, ponechá. Nejdřív zálohuj uložené pozice.
U hostingu založeného na kontejnerech je třeba jmenovat ještě jednu příčinu. Pokud server při instalaci nebo aktualizaci narazí na limit paměti, kontejner se zastaví místo toho, aby se přesunul do swapu - u RE:NODE se čistě restartuje - a zbude rozepsaná instalace se stavem ve stylu 0x602. Opětovné spuštění aktualizace s validate ji opraví. Pokud se to opakuje, je tarif pro instalační krok té hry příliš malý; proč se tvůj herní server pořád restartuje vysvětluje, jak to poznat. Konzole panelu ukazuje výstup SteamCMD řádek po řádku a vykresluje využití disku proti limitu tarifu, což obvykle stačí k tomu, abys poznal, kterou z výše uvedených příčin jsi zasáhl; průvodce konzolí ukazuje, kde ji najdeš.
FAQ#
Je „Missing configuration“ problém mého serveru?
Většinou ne. Znamená, že SteamCMD od Steamu nezískal použitelnou konfiguraci aplikace - nejčastěji kvůli zastaralé cache informací o aplikaci, špatnému app id nebo přechodnému selhání. Zkus to jednou znovu, ověř, že id patří dedikovanému serveru, a ne hře, pak smaž složku appcache v adresáři SteamCMD a spusť znovu.
Co znamená „state is 0x202 after update job“?
Aktualizace se zastavila, zatímco ji aplikace stále potřebuje: příznak 0x2 je „vyžaduje aktualizaci“ a 0x200 je „aktualizace pozastavena“. V praxi je to téměř vždy disk, kterému během stahování došlo místo. Uvolni místo na instalačním svazku, nech si rezervu 20-30% a spusť aktualizaci s validate.
Proč SteamCMD hlásí „No subscription“, když je server zdarma?
Protože nástroj serveru pro danou hru není pro anonymní přihlášení zdarma. DayZ, Arma 3 a Project Zomboid vyžadují účet Steam, který hru vlastní. Stejná zpráva se objeví, i když přihlášení dříve ve výstupu tiše selhalo, takže zkontroluj, že řádek přihlášení skončil OK.
Mám spouštět SteamCMD jako root, abych se zbavil chyb s oprávněními?
Ne. Způsobí to, že selže další aktualizace, protože soubory, které zapisuje, patří rootovi a uživatel služby je nemůže nahradit. Spouštěj SteamCMD jako stejného běžného uživatele, který spouští server, jednou nastav chown instalačního adresáře na něj a chyby s oprávněními zmizí.
Můžu bezpečně smazat složku appcache SteamCMD?
Ano. Je to cache metadat aplikací, kterou SteamCMD při dalším běhu postaví znovu, a neobsahuje žádné herní soubory, uložené pozice ani přihlašovací údaje. Nepleť si ji se steamapps uvnitř instalačního adresáře, která drží manifest aplikace a záznamy o Workshopu.
Jak opravit SteamCMD na čerstvé 64bitové instalaci Linuxu?
Povol 32bitové balíčky a nainstaluj 32bitový běhový modul C a C++: na Debianu a Ubuntu dpkg --add-architecture i386 a potom apt install lib32gcc-s1 (nebo lib32gcc1 u starších vydání), a lib32stdc++6, pokud si pořád stěžuje. Na systémech rodiny RHEL glibc.i686 a libstdc++.i686.


