Naplánovaný restart serveru Valheim se vyplatí mít a je bezpečný, pokud platí jedno pravidlo: server se musí zastavit přerušovacím signálem, nikdy ne zabít, protože právě čisté zastavení zapíše svět na disk. Jednou denně u rušného nebo modovaného serveru, několikrát týdně u malé vanilla party, v hodinu, kdy nikdo nehraje. Vanilla Valheim nedokáže hráče ze strany serveru varovat, takže varování jde přes Discord nebo mód, nebo restartuješ jen tehdy, když je server prázdný. Aktualizace mohou jet spolu s restartem, ale jen na vanilla serveru - modovaný server by se nikdy neměl aktualizovat sám.
Zbytek tohoto průvodce popisuje, jak to postavit na vlastním Linuxovém stroji pomocí cronu a systemd, uvnitř Dockeru a na panelu, plus chyby, které z neškodného restartu udělají ztracený večer stavění.
Proč server Valheim vůbec restartovat#
Server Valheim, který běží týdny, dál funguje, ale časem se rozjíždí. Důvody, proč naplánovaný restart pomáhá, jsou konkrétní:
- Paměť se plíží nahoru. Server drží v paměti každou načtenou zónu a každou instanci objektu. Jak hráči prozkoumávají a stavějí, pracovní sada roste a nemusí se zmenšit, když oblast opustí. Restart ji vrátí na cenu světa tak, jak je uložený.
- Mody prosakují. Pluginy BepInEx píšou dobrovolníci pro hru, která se jim pod rukama mění. Mód, který drží reference nebo roste mu cache, je běžný a denní restart skryje pomalý únik, který by jinak skončil zastavením pro nedostatek paměti v nejhorší chvíli.
- Aktualizace restart potřebují. Patch Valheimu se aplikuje zastavením serveru, spuštěním SteamCMD a novým startem. Pokud je restart už naplánovaný, aktualizace může proběhnout v něm.
- Čistý stav po zaseknutí. Cukající lodě, raid, který nikdy neskončí, objekty, které se nechtějí synchronizovat - většina z toho zmizí po restartu, protože se vlastnictví zón rozdá znovu tomu, kdo přijde první.
Co restart nespraví, je stejně důležité. Neudělá levnější provoz světa s obří terraformovanou základnou, nevyléčí špatné připojení jednoho hráče a nezastaví pád, který nastává při načítání. Pokud je server hned po restartu pomalý, problém je ve světě nebo v tarifu a podívej se do výkonu a lagu serveru Valheim.
Jeden vedlejší efekt zasáhne crossplay skupiny: šestimístný kód pro připojení se mění při každém startu serveru. Denní restart znamená denně nový kód, takže pokud se tak připojují konzoloví hráči, měla by rutina restartu nový kód zveřejnit někde, kde ho uvidí. Víc o tom níže.
Jak často a v kolik hodin#
Žádný kouzelný interval není. Vyber ho podle toho, jak se server používá:
| Server | Interval | Proč |
|---|---|---|
| 2-5 kamarádů, vanilla | Týdně nebo dvakrát týdně | Málo růstu, málo objektů, žádné mody, které by prosakovaly |
| 6-10 hráčů, vanilla, zralý svět | Denně | Velké stavby a mnoho ochočených zvířat se sčítá |
| Jakýkoli modovaný server | Denně | Pluginy jsou obvyklým zdrojem plíživé paměti |
| Veřejný komunitní server | Denně, plus před událostmi | Víc hráčů znamená víc zón načtených najednou |
Spouštěj ho, když je server obvykle prázdný. Zjisti, kdy vaše parta opravdu hraje, a nehádej - log zaznamenává každé připojení a týden dat ti prozradí klidnou hodinu. U evropské party to bývá mezi 04:00 a 07:00. Pokud se parta rozprostírá přes časová pásma, nemusí být žádná prázdná hodina, a to je případ pro varování, o kterém je řeč dál.
Dva detaily načasování jsou důležitější než samotná hodina. Za prvé, vědět, jaké časové pásmo plánovač používá. Cron používá pásmo stroje, mnoho kontejnerů má výchozí UTC a plán v panelu se řídí tím, co je v panelu nastaveno. Zapiš si restart do poznámek v UTC a letní čas tě nepřekvapí. Za druhé, nenavršuj úlohy na stejnou minutu. Záloha, která začne, zatímco se server vypíná, zkopíruje svět v půlce zápisu. Nech mezi restartem, zálohou a čímkoli dalším mezeru několika minut. Pokud ti pětipolová syntaxe není povědomá, vysvětluje ji výrazy cronu vysvětleny.
Jediné pravidlo: zastav čistě, aby se svět uložil#
Valheim drží svět v paměti a zapisuje ho každých -saveinterval sekund, ve výchozím stavu 1800. Ukládá také, když je slušně požádán o zastavení. Na Linuxu to znamená SIGINT, tentýž signál jako stisk Ctrl+C v terminálu. Server ho zachytí, zapíše do logu World saved a skončí. SIGKILL zachytit nelze: proces zmizí a s ním všechno od posledního uložení.
Každá metoda restartu níže se redukuje na poslání správného signálu a dost dlouhé čekání. Velký starý svět může zápis trvat desítky sekund a pomalý disk to prodlouží. Pokud se tvůj nástroj po deseti sekundách vzdá a přejde na zabití, přijdeš o data právě u světů, na kterých záleží nejvíc.
Příslušná část jednotky systemd vypadá takto:
[Service]User=valheimWorkingDirectory=/home/valheim/serverExecStart=/home/valheim/server/start_server.shKillSignal=SIGINTTimeoutStopSec=120Restart=on-failureRestartSec=10Než tomu uvěříš, vyzkoušej to jednou ručně: sudo systemctl restart valheim, pak journalctl -u valheim -n 50 a hledej řádek s uložením před startovacími řádky. Pokud uložení chybí, signál se k procesu serveru nedostává - obvykle proto, že startovací skript ho spouští na pozadí nebo ho nespustí přes exec. Celá jednotka včetně logů a politiky restartu je v článku provoz Valheimu jako služby systemd.
Restart pomocí cronu nebo časovače systemd#
Na stroji, který ovládáš, je nejjednodušší naplánovaný restart jeden řádek v cronu uživatele root, který zastavení a start nechá na jednotce výše:
# Every day at 05:00 machine time0 5 * * * root /usr/bin/systemctl restart valheimSoubory v /etc/cron.d mají pole s uživatelem (tady root), na rozdíl od osobního crontabu. Pokud to chceš mít uvnitř systemd, časovač dělá stejnou práci a loguje do žurnálu:
[Unit]Description=Daily Valheim restart[Timer]OnCalendar=*-*-* 05:00:00Persistent=false[Install]WantedBy=timers.target[Unit]Description=Restart the Valheim server[Service]Type=oneshotExecStart=/usr/bin/systemctl restart valheim.serviceZapni ho příkazem sudo systemctl enable --now valheim-restart.timer a další spuštění zkontroluj pomocí systemctl list-timers. Persistent=false má význam: s hodnotou true by stroj, který byl v 05:00 vypnutý, provedl zmeškaný restart hned po nabootování, což je pro restart zbytečné.
LinuxGSM
Pokud byl server nainstalován přes LinuxGSM, má vlastní příkazy: ./vhserver restart, ./vhserver update (zastaví, aktualizuje a spustí jen tehdy, když existuje nový build) a ./vhserver monitor (znovu spustí server, pokud spadl). Ty patří do crontabu uživatele vhserver. Nastavení a kompromisy oproti obyčejnému skriptu popisuje LinuxGSM vhserver.
Varování hráčů před restartem#
Vanilla Valheim nemá vstup do konzole serveru ani příkaz pro rozeslání zprávy. Nemůžeš do serveru napsat „restart za pět minut“ a čekat, že se to objeví na obrazovce. Zbývají tři poctivé možnosti.
- Restartuj jen tehdy, když nikdo není online. U malé party je to nejlepší odpověď. Restart v prázdnou hodinu žádné varování nepotřebuje.
- Varuj přes Discord. Většina part už má kanál. Skript pošle zprávu na webhook Discordu, počká a pak restartuje.
- Použij mód. Server Devcommands přidává příkaz
broadcast, ale píše ho připojený admin, nespouští ho cron. Existují i serverové mody s oznámeními; zkontroluj, že ten, který si vybereš, je udržovaný pro aktuální verzi hry.
Cesta přes Discord je tucet řádků shellu:
#!/usr/bin/env bashset -euo pipefailWEBHOOK="https://discord.com/api/webhooks/REPLACE/ME"say() { curl -fsS -H "Content-Type: application/json" \ -d "{\"content\":\"$1\"}" "$WEBHOOK" >/dev/null || true}say "Valheim restarts in 10 minutes. Find a safe spot."sleep 540say "Valheim restarts in 1 minute."sleep 60systemctl restart valheimsay "Valheim is restarting. Back in about two minutes."Nasměruj řádek cronu na skript místo na systemctl. || true zajistí, že výpadek Discordu restart nezruší. S URL webhooku zacházej jako s heslem: kdokoli, kdo ji má, může do kanálu psát. Vytvoření webhooku a formátování zpráv popisují webhooky Discordu pro stav serveru.
Vynechání restartu, když lidé hrají
Můžeš také zkontrolovat, jestli je někdo online, a restart vynechat. Server odpovídá na dotazy Steamu na portu hry plus jedna (ve výchozím stavu 2457) a knihovna python-a2s přečte počet hráčů:
$ pip install python-a2s$ python3 -c 'import a2s,sys; sys.exit(1 if a2s.info(("127.0.0.1",2457)).player_count else 0)' \ && systemctl restart valheimPříkaz skončí nenulovým kódem, když jsou hráči připojeni, takže restart proběhne jen na prázdném serveru. Dotaz si nejdřív vyzkoušej na vlastním serveru - pokud vyprší časový limit, restart nikdy neproběhne, což selže bezpečně, ale mlčky. Dotaz podrobně, včetně toho, kdy neodpovídá, popisuje monitoring serveru Valheim a počty hráčů.
Aktualizace při restartu a kdy ne#
Restart je přirozená chvíle na aktualizaci. Na instalaci se systemd přidej aktualizaci SteamCMD jako krok před startem, aby ji spouštěl každý start:
[Service]ExecStartPre=/usr/games/steamcmd +force_install_dir /home/valheim/server \ +login anonymous +app_update 896660 validate +quitTimeoutStartSec=600Cesta k steamcmd závisí na způsobu instalace - /usr/games/steamcmd je místo, kam ho dává balíček pro Ubuntu a Debian; ruční instalace leží tam, kam jsi ji rozbalil. Zvyš TimeoutStartSec, aby se pomalé stahování nepovažovalo za neúspěšný start. Pokud nový build neexistuje, krok trvá pár sekund.
Pro vanilla server je to správná výchozí volba. Po patchi si hráči aktualizují hru a server už jim odpovídá. Alternativou je chyba „Incompatible version“ a někdo, kdo ti o půlnoci píše - viz aktualizace serveru Valheim, jak kontrola verze funguje.
Pro modovaný server je to špatná výchozí volba, vždy. Aktualizace hry rozbije pluginy BepInEx, dokud je autoři nedoženou, někdy i na dny. Server, který se aktualizuje sám při ranním restartu, všechny přivítá pádem při startu nebo zdí vyhazovů kvůli neshodě verzí. Odstraň krok před startem, aktualizuj ručně, až budou tvé mody aktualizované, a nejdřív udělej zálohu. Naplánovaný restart nech; jen z něj vynech aktualizaci.
V Docker obrazu lloesche/valheim-server je stejné rozdělení ve dvou proměnných: RESTART_CRON (ve výchozím stavu denně v 05:00) a UPDATE_CRON (ve výchozím stavu každých 15 minut), každá s přepínačem _IF_IDLE, který akci zadrží, dokud jsou hráči připojeni. U modovaného kontejneru nastav UPDATE_CRON na prázdnou hodnotu a RESTART_CRON nech. Celá tabulka proměnných je v článku Valheim v Dockeru.
Restarty a zálohy dohromady#
Pořadí je důležité. Záloha kopíruje soubory na disku a ty jsou jen tak čerstvé jako poslední uložení. Když zálohuješ nejdřív a restartuješ potom, záloha může být stará až celý interval ukládání. Když restartuješ nejdřív, čisté zastavení zapíše svět a záloha pořízená o pár minut později obsahuje všechno do restartu.
Posloupnost, která funguje:
- Varuj hráče (pokud někdo může být online).
- Restartuj, což cestou dolů ukládá.
- Počkej, až server naběhne úplně - dvě až pět minut u velkého světa.
- Udělej zálohu a pak ji zkopíruj mimo stroj.
Neplánuj zálohu na stejnou minutu jako restart. Kopie pořízená, zatímco server zapisuje poslední uložení, může zachytit useknuté .db, což je právě ten soubor, po kterém sáhneš po katastrofě. Vlastní rotace -backups Valheimu náhradou není: leží ve stejné složce na stejném disku. Obnovu a rozpoznání poškozeného světa popisují zálohy Valheimu a poškození světa.
Na panelu#
Na hostovaném panelu nepíšeš řádky cronu ani jednotky; stejné stavební kameny jsou úlohy v plánu. Na RE:NODE karta Schedules přijímá výraz cronu a uspořádaný seznam úloh se zpožděním mezi nimi a každá úloha je příkaz konzole, záloha nebo akce napájení. Denní restart s čerstvou zálohou jsou dvě úlohy:
| Pořadí | Úloha | Zpoždění před ní | Účel |
|---|---|---|---|
| 1 | Akce napájení: restart | - | Čisté zastavení uloží svět, pak start |
| 2 | Záloha | 5 minut | Zachytí svět tak, jak byl právě uložen |
Akce napájení Restart pošle čisté zastavení, takže se svět uloží, než server spadne, a zálohy se ukládají mimo stroj, který chrání. Úloha s příkazem konzole není na vanilla Valheimu k varování užitečná, protože server vstup konzole nečte; pošli varování z Discordu nebo naplánuj restart na prázdnou hodinu. Hlídač pádů, který upozorňuje na opakované restarty, restarty, o které jsi požádal, nepočítá, takže denní plán ho nespustí. Sekce o plánech v průvodcích ukazuje, kde je každé pole.
Jednu věc plán v panelu vidět nemůže: jestli jsou hráči online. Pokud na tom záleží, vyber hodinu pečlivě nebo použij serverový mód, který restart odloží, dokud lidé hrají.
Když se naplánovaný restart pokazí#
Svět se po restartu vrátil zpátky. Zastavení bylo zabití, ne přerušení. Zkontroluj v logu World saved těsně před vypnutím. V systemd nastav KillSignal=SIGINT a zvyš TimeoutStopSec. V Dockeru nastav stop_grace_period na minutu nebo dvě.
Server se nevrátil. Podívej se do startovacího logu, ne do vypínacího. Obvyklé příčiny po naplánovaném restartu jsou aktualizace, která rozbila mód, stahování SteamCMD, které selhalo v půlce, nebo svět, který teď k načtení potřebuje víc paměti, než je limit. Chyby vypisuje pád serveru Valheim při startu.
Restart proběhl ve špatnou hodinu. Časové pásmo. Porovnej date na stroji s tím, co jsi čekal, a pamatuj, že kontejnery často běží v UTC.
Hráči dostali „Incompatible version“ ráno po patchi. Server se aktualizoval a jejich klienti ještě ne - nebo naopak, pokud jsi odstranil krok aktualizace. Řekni partě, ať si aktualizuje hru a restartuje Steam.
Konzoloví hráči se nemohou znovu připojit. Změnil se kód pro připojení. Zveřejni nový; kde se objevuje, popisuje průvodce crossplayem.
FAQ#
Ukládá restart svět Valheimu?
Jen čisté zastavení. Server zapisuje svět, když dostane přerušovací signál, jaký posílá normální zastavení v panelu nebo systemctl stop s KillSignal=SIGINT. Násilné zabití, zastavení pro nedostatek paměti nebo výpadek proudu ztratí všechno od posledního časovaného uložení.
Můžu poslat varovnou zprávu z konzole serveru?
Na vanilla Valheimu ne. Dedikovaný server nemá vstup konzole ani příkaz pro rozeslání zprávy. Použij zprávu na Discordu před restartem, mód, který přidává oznámení serveru, nebo čas restartu, kdy nikdo není online.
Jak dlouho restart Valheimu trvá?
Obvykle jednu až tři minuty: uložení cestou dolů a pak načtení světa. Velké, hustě zastavěné světy na pomalých discích trvají déle a kontrola aktualizace přidá, co je potřeba ke stažení.
Má se modovaný server při restartu aktualizovat automaticky?
Ne. Patche hry rozbíjejí mody BepInEx, dokud se neaktualizují, a automatická aktualizace změní rutinní restart na server, který nenastartuje. Restartuj podle plánu, aktualizuj ručně, až tvé mody novou verzi podporují.
Opotřebují denní restarty něco, nebo stojí postup?
Ne. Čistý restart nikoho nic nestojí kromě minuty nebo dvou výpadku. Postup se ztrácí jen tehdy, když zastavení není čisté, a proto jsou nastavení signálu a časového limitu důležitější než plán.


