Portál AbcLinuxu, 5. května 2025 03:09
Ahoj všem zkušenějším uživatelům. Kamarád má VPS a na něm herní server, který spouštím přes utilitu screen. Problém se v tom, že když na server nahraje třeba špatnou mapu nebo modifikaci, server nenaběhne a nijak nezjistí důvod proč tomu tak je. Protože započetí logování znikne až, když se server úspěšně zapne, pokud je špatná mapa nebo někde něco, server se nezapne a tudíž se nezapne ani logování a není možnost zjisti příčinu problému. On se na VPS neumí ani přihlásit, tudíž nemá root access. Pouze webksicht, kterým může server zapnout/vypnout/restarovat. Mě sice nedělá problém kouknout mu do toho screenu čím to je, nebo spustit server bez screenu (vypíše mi to terminál) a příčinu problému zjistit. Ale já nejsem online 24/7, abych mu mohl stát za zadkem a hlásit mu chyby, proč mu nejde zapnout herní server.
Příklady jak to funguje:A. Spuštění serveru bez screenu (server bez problému) terminál vypíše například:
Herní data načtené... Nastavení serveru načteno... Server byl zapnut... Logování zapnuto...
B. Spuštění serveru bez screenu ( server s problémem špatná mapa )
Herní data načtené... Nastavení serveru načteno... Chyba server se nepodařilo zapnout z důvodu: chyba 89896875 v mapě: Arena
C. Spuštění serveru přes screen po odeslání příkazu terminál nic nepíše, jedině následném napsání "screen -r nazev-screenu" ovšem, pokud je naříklad chyba v napě, proces screenu v "ps ax" běží dál, ale příkaz: "screen -r nazev-screenu" nefunguje.
Nedalo by se tedy udělat, aby když se spustí "screen -A -m -d -S herni-server ./sputeci-script.sh", tak aby něco udělalo to, že zaloguje obsah toho terminálu "screen -r herni-server"do datum.txt třeba do /home/user/herni-server/"? Nebo jiným způsobem?
Děkuji za každou radu, pomoc, návod a váš čas.
Něco takovýho?
screen -S herni-server -X at … hardcopy blabla.txt ↑ └ název nebo číslo okna ve screenu
To vypadá dobře, jen nevím co znamená: "název nebo číslo okna ve screenu" já myslel, že název screenu je: "herni-server"
A kdybych to chtěl do home, tak by to bylo: "screen -S herni-server -X at neco hardcopy /home/user/crash/blabla.txt" ? A když už blabla.txt v té složce bude, tak jí to přepíše, nebo otevře a připíše dovnitř?
jen nevím co znamená: "název nebo číslo okna ve screenu" já myslel, že název screenu je: "herni-server"
V každém screenu může být víc oken – něco jako taby v prohlížeči. Já z dotazu nějak pochopil, že tam kromě toho serveru běží ještě ps ax
.
Pokud je tam jen jedno okno, má číslo nula: -X at 0 hardcopy
A kdybych to chtěl do home, tak by to bylo: …
Jo.
A když už blabla.txt v té složce bude, tak jí to přepíše, nebo otevře a připíše dovnitř?
Zkusil jsem to a přepíše. Asi by bylo dobré si ty soubory pojmenovat podle času spuštění.
Něco jako /home/user/crash/herniserver-`date +%Y-%m-%d_%H:%M:%S`.txt
→ herniserver-2013-11-15_18:25:17.txt
Tak se zdá, že to může i připisovat do stejného souboru: hardcopy_append on
.
Je to ozkoušené? Mě to bohužel asi nefunguje. 1. Spustil jsem server pod screenem. 2. Vložil jsem do terminálu: "screen -S server-27090 -X at 0 hardcopy /home/cs/crashlog.txt" 3. Nicméně v /home/cs/ se mi crashlog.txt nevytvořil. Nebo se uloží někdy později? Kdy?
#!/bin/sh #spusti herni skript a vystupy presmeruje do ~/game-logy/$(date).txt log="~/game_log/$(date)" /ceste/ke/hre > "$log".$txt 2> "$log".txtnebo bych volil vsechny logy do jednoho souboru, aby bylo mozne cist interaktivne pomoci tail
log="~/game_log.txt" echo "starting server $(date)" >> "$log" /ceste/ke/hre >> "$log".$txt 2>> "$log".txtv jinem terminalu pro interaktivni cteni logu serveru:
tail -f ~/game_log.txt
Tak nějak si nejsem vůbec jistý jak to použít. Soubor ./start-serveru.sh by mohl vypadat třeba takhle?
#!/bin/sh screen -A -m -d -S hltv ./spoustec-serveru.sh log="~/game_log.txt" echo "starting server $(date)" >> "$log" /ceste/ke/hre >> "$log".$txt 2>> "$log".txt
A tu tail konzoli asi nepotřebuji, ani nevím co to je. Číst to bude editor integrovaný ve FTP/SFTP/SCP klientovi winSCP.
#!/bin/sh log_file="/home/user/game_log.txt" echo "starting server $(date)" >> "$log_file" /cesta/k/spoustec-serveru.sh >> "$log_file" 2>> "$log_file"a tento soubor spoustej
screen -A -m -d -S hltv ./run-server-s-logovanim.sh
screen -A -m -d -S hltv `./spoustec/serveru &>> /cesta/k/logu`
jenom bez data
logfile "/cesta/k/logu"
deflog on
A spouštět, tak jako předtím...
~/.screenrc
je konfigurační skript, který screen načítá při startu a říká mu jak se má chovat
deflog on
potom zapíná logování screen session, default je /etc/screenlog.n
, kde n je okno screenu
Nejsem si úplně jistej jak přesně se to bude chovat, když uvedeš k logu jinou cestu (jestli smíchá všechna okna screenu dohromady, nebo ne), screen moc nepoužívám, takže možná někoho napadne něco lepšího..
Když potom spustíš screen [opts] ./cesta/k/serveru.sh
, spustí se herní server přímo v rámci procesu screenu, jak potřebuješ..
Takhle to samozřejmě bude fungovat jenom pro uživatele u kterého jsi vytvořil ~/.screenrc
a ten ještě musí být spustitelný..
screen -L -A -m -d -S herni-server ./herni-server.sh
potom bude logovat do ~/screenlog.n ;n=číslo okna screenu a platí jen pro tuhle danou session..
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.