Restarter

Z ZděchovNET
Skočit na navigaci Skočit na vyhledávání

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.

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

Diskuse ve fóru

Související

Vnější odkazy