Restarter
Herní emulátory jako takové nejsou bezchybné a může dojít k přerušení jejich funkčnosti v důsledku nějaké chyby. Protože selhávání emu není nic neobvyklého, je potřeba podniknout patřičné kroky k tomu, aby v případě selhání emulátor opět samovolně nastartoval.
Přitom běh emulátoru může skončit také na základě ručně vyvolaných GM příkazů typu .restart, .shutdown či .server shutdown.
Obsah
Linux
Jednoduchá varianta
restarter.sh:
#!/bin/sh while true do ./mangos-worldd sleep 5 done
Jde o skript s jednoduchou nekonečnou smyčkou, která zajistí restart emu v případě jeho ukončení. Zde vložená prodleva 5 sekund zamezuje přetěžování serveru neustálými pokusy o neúspěšné nastartování emulátoru a růstu velikosti ladících záznamů(logů).
Uvedené příkazy lze také zapsat úsporně na jeden řádek:
while :; do ./mangos-worldd; done
Běh aplikace i při odpojení z terminálu
Pokud chcete, aby spuštěný program běžel i po uzavření okna terminálu, je potřeba jej spouštět ve speciálním režimu.
nohup
Tento příkaz učiní program imunní proti signálu ukončení terminálu SIGHUP.
nohup restarter.sh
screen
Další možností jak docílit běhu aplikace na pozadí je příkaz screen, který vytváří pro program samostatné terminálové sezení nezávislé na aktuálně běžícím terminálu.
Tento nástroj je potřeba do systému většinou doinstalovat pomocí platného balíčkového systému pro danou distribuci.
screen -A -m -d -S mangos123 restarter.sh
Zde parametr -S určuje vlastní označení daného sezení. V tomto případě např. mangos123.
Pak lze vytvořit skript, který umožní ukončit toto pojmenované spojení.
stop.sh:
#!/bin/sh ps -ef | grep 'SCREEN -A -m -d -S mangos123' | grep -v grep | awk '{print $2}' | xargs -i kill {}
Při spouštění lze pak také zamezit vícenásobnému spuštění pomocí kontrolní podmínky.
start.sh:
#!/bin/sh if [ -z `ps -ef | grep 'SCREEN -A -m -d -S mangos123' | grep -v grep | awk '{print $2}'` ] then screen -A -m -d -S mangos123 restarter.sh fi
Windows
Příklad restartéru v podobě BAT skriptu.
set datum=%date% set datum1=%date: =-% set datum2=%datum1:.=-% for /F "tokens=1-4 delims=:., " %%a in ('time/T') do set Time=%%ah-%%bmin REM -------------------------------- REM -------Zacatek nastaveni-------- REM -------------------------------- REM -------------------------------- set slozka=D:\Servery\MANGOS\ set log=D:\Servery\MANGOS\restarter.log set mangosd=20000 set realmd=10000 set cekat=10000 set realmdport=3724 set mangosdport=8085 REM -------------------------------- REM --------Konec nasteveni--------- REM -------------------------------- REM u mangosd nastav čas pro spuštění core (v milisekundach) REM u realmd nastav čas pro spuštění realmu (v milisekundach) REM slazka - kořenova složka serveru (ta kde je mangosd.exe a realmd.exe) REM realmdport : nastavte port na kterem jede realmd REM mangosdprot : nastavte port na kterem jede mangosd REM -------------------------------- CD /D "%slozka%" echo off prompt $S TITLE Demolisnman's Restarter cls :check nmap 127.0.0.1 -p %mangosdport% | find "open" > nul IF /I %ERRORLEVEL% EQU 1 GOTO reboot ELSE GOTO check2 cls :check2 nmap 127.0.0.1 -p %realmdport% | find "open" > nul IF /I %ERRORLEVEL% EQU 1 GOTO reboot2 ELSE goto check cls ping -w %cekat% -l 0 -n 1 0.0.0.1 > nul goto check :reboot echo %datum% v %time% byl zaznamenán pád mangosd.exe >> %log% taskkill /IM mangosd.exe start mangosd.exe cls ping -w %mangosd% -l 0 -n 1 0.0.0.1 > nul goto check :reboot2 echo %datum% v %time% byl zaznamenán pád realmd.exe >> %log% taskkill /IM realmd.exe start realmd.exe cls ping -w %realmd% -l 0 -n 1 0.0.0.1 > nul goto check