1 estrella2 estrellas3 estrellas4 estrellas5 estrellas (3 votos, promedio: 5,00 de 5)
Cargando...

Antes que nada quiero remarcar que este script no está hecho por mí. No conozco el autor, pero si que en las fuentes enlazaré la página donde lo encontré. Este AutoRestarter para emuladores de Wow, es válido para cualquier tipo de emulador.

También lo he traducido para que muestre los avisos en español. Este script sirve para que el servidor reinicie automáticamente si sufre una caída. También se puede monitorear extenamente siempre que puedas conectar via SSH.

Puedes descargarlo de mi repositorio GitLab, o copiarlo directamente de aquí.

Para poder utilizarlo, antes debes instalar un par de paquetes. Está probado en Debian y Arch, por lo que no puedo asegurar que funcione correctamente en otras distribuciones.

Vamos a instalar los paquetes.

Debian y derivados:

$ sudo apt install screen gdb

Archlinux y derivadas:

$ sudo pacman -S screen gdb

Una vez instalados los paquetes, procedemos a copiar el AutoRestarter para emuladores de Wow en la carpeta donde tengamos los ejecutables del emulador.

Recuerda que para copiar el texto, debes hacer click en el símbolo + tal como indica la imagen de la derecha. Al hacer clic, se abrirá una nueva ventana, de donde podrás copiarlo sin ningún problema.

El Script

#!/bin/bash

THIS_FULLPATH=$(cd `dirname "${BASH_SOURCE[0]}"` && pwd -P)/`basename "${BASH_SOURCE[0]}"`
THIS_FOLDERPATH=$(cd `dirname "${BASH_SOURCE[0]}"` && pwd -P)

APATH=/ruta/de/tu/authserver
WPATH=/ruta/de/tu/worldserver
ASRV_BIN=authserver         #Escoger según el emulador. TrinityCore: authserver  MaNGOS: realmd  ArcEmu: pfffff
WSRV_BIN_ORG=worldserver    #Escoger según el emulador. TrinityCore: worldserver MaNGOS: mangosd ArcEmu: pfffff
WSRV_BIN=worldserver
WSRV_SCR=worldserver

echo "run" > gdbcommands
echo "shell echo -e \"\nCRASHLOG BEGIN\n\"" >> gdbcommands
echo "info program" >> gdbcommands
echo "shell echo -e \"\nBACKTRACE\n\"" >> gdbcommands
echo "bt" >> gdbcommands
echo "shell echo -e \"\nBACKTRACE FULL\n\"" >> gdbcommands
echo "bt full" >> gdbcommands
echo "shell echo -e \"\nTHREADS\n\"" >> gdbcommands
echo "info threads" >> gdbcommands
echo "shell echo -e \"\nTHREADS BACKTRACE\n\"" >> gdbcommands
echo "thread apply all bt full" >> gdbcommands

DEBUG=false

#WORLD FUNCTIONS
startWorld()
{
    if [ "$(screen -ls | grep $WSRV_SCR)" ]
    then
        echo $WSRV_BIN ya está en ejecución
    else
        cd $WPATH
        screen -AmdS $WSRV_SCR $THIS_FULLPATH $WSRV_BIN $DEBUG
        echo $WSRV_BIN en marcha
    fi
}

restartWorld()
{
    screen -S $WSRV_SCR -X stuff "saveall$(printf \\r)"
    echo salvados todos los personajes y se empieza el reinicio del servidor
    screen -S $WSRV_SCR -X stuff "server restart 5$(printf \\r)"
}

stopWorld()
{
    screen -S $WSRV_SCR -X stuff "saveall
    "
    echo guardado total enviado, esperando 5 segundos para matar el proceso $WSRV_BIN
    sleep 5
    screen -S $WSRV_SCR -X kill &>/dev/null
    echo $WSRV_BIN está muerto
}

monitorWorld()
{
    echo presione ctrl + a + d para desconectarse del servidor sin apagarlo
    sleep 5
    screen -r $WSRV_SCR
}
#AUTH FUNCTIONS
startAuth()
{
    if [ "$(screen -ls | grep $ASRV_BIN)" ]
    then
        echo $ASRV_BIN ya está funcionando
    else
        cd $APATH
        screen -AmdS $ASRV_BIN $THIS_FULLPATH $ASRV_BIN
        echo $ASRV_BIN está en marcha
    fi
}

stopAuth()
{
    screen -S $ASRV_BIN -X kill &>/dev/null
    echo $ASRV_BIN está muerto
}

restartAuth()
{
    stopAuth
    startAuth
    echo $ASRV_BIN reiniciado
}

monitorAuth()
{
    echo presione ctrl + a + d para desconectarse del servidor sin apagarlo
    sleep 5
    screen -r $ASRV_BIN
}

#FUNCTION SELECTION
case "$1" in
    $WSRV_BIN )
    if [ "$2" == "true" ]
    then
        while x=1;
        do
            gdb $WPATH/$WSRV_BIN --batch -x gdbcommands | tee current
            NOW=$(date +"%s-%d-%m-%Y")
            mkdir -p $THIS_FOLDERPATH/crashes
            mv current $THIS_FOLDERPATH/crashes/$NOW.log &>/dev/null
            killall -9 $WSRV_BIN
            echo $NOW $WSRV_BIN parado, reiniciando! | tee -a $THIS_FULLPATH.log
            echo crashlog disponible en: $THIS_FOLDERPATH/crashes/$NOW.log
            sleep 1
        done
    else
        while x=1;
        do
            ./$WSRV_BIN
            NOW=$(date +"%s-%d-%m-%Y")
            echo $NOW $WSRV_BIN parado, reiniciando! | tee -a $THIS_FULLPATH.log
            sleep 1
        done
    fi
    ;;
    $ASRV_BIN )
        while x=1;
        do
            ./$ASRV_BIN
            NOW=$(date +"%s-%d-%m-%Y")
            echo $NOW $ASRV_BIN parado, reiniciando! | tee -a $THIS_FULLPATH.log
            sleep 1
        done
    ;;
    "wstart" )
    startWorld
    ;;
    "wdstart" )
    DEBUG=true
    startWorld
    ;;
    "wrestart" )
    restartWorld
    ;;
    "wstop" )
    stopWorld
    ;;
    "wmonitor" )
    monitorWorld
    ;;

    "astart" )
    startAuth
    ;;
    "arestart" )
    restartAuth
    ;;
    "astop" )
    stopAuth
    ;;
    "amonitor" )
    monitorAuth
    ;;
    
    "start" )
    startWorld
    startAuth
    ;;
    "stop" )
    stopWorld
    stopAuth
    ;;
    "restart" )
    restartWorld
    restartAuth
    ;;
    * )
    echo Especifica una opción - wowadmin.sh [opcion]
    echo "opciones: start | stop | restart | wstart | wdstart | wrestart | wstop | wmonitor | astart | arestart | astop | amonitor"
    exit 1
    ;;
esac

Configuración

Debemos hacer unos pequeños cambios para que nos funcione. Abrimos el archivo con nuestro editor de texto y en la parte superior encontramos estas líneas, de la 6 a la 11:

APATH=/ruta/de/tu/authserver
WPATH=/ruta/de/tu/worldserver
ASRV_BIN=authserver         #Escoger según el emulador. TrinityCore: authserver  MaNGOS: realmd  ArcEmu: pfffff
WSRV_BIN_ORG=worldserver    #Escoger según el emulador. TrinityCore: worldserver MaNGOS: mangosd ArcEmu: pfffff
WSRV_BIN=worldserver
WSRV_SCR=worldserver

En mi caso, los nombres de los ejecutables no necesito modificarlos, ya que están para emuladores TrinityCore y AzerothCore. Tan solo editaré las dos líneas que contienen las rutas del emulador.

APATH=/home/yogui/Servers/acore/bin/authserver
WPATH=/home/yogui/Servers/acore/bin/worldserver

Con estos sencillos pasos, ya es suficiente para que funcione, pero vamos a hacer que podemos ejecutarlo desde cualquier carpeta que estemos sin tener que escribir toda la ruta hasta el archivo.

Enlace símbólico

Para esto, primero crearemos un enlace simbólico del archivo a la carpeta /usr/bin. La sintaxis sería:

sudo ln -s /ruta/de/tu/emulador/bin/wowadmin.sh /usr/bin

Que en mi caso es:

$ sudo ln -s /home/yogui/Servers/acore/bin/wowadmin.sh /usr/bin

Ya tenemos el enlace simbólico creado, ahora le daremos permisos de ejecución al archivo, y nos haremos propietarios del enlace simbólico, de lo contrario tendríamos que ejecutar siempre el script con sudo delante.

$ chmod +x $HOME/Servers/acore/bin/wowadmin.sh
$ sudo chown -h yogui:yogui /usr/bin/wowadmin.sh

Hemos terminado de configurarlo todo. Si ejecutamos el comando wowadmin.sh desde cualquier ubicación debe salir el siguiente mensaje, lo que nos muestra que todo a salido bien:

Funcionamiento del AutoRestarter para emuladores Wow

El funcionamiento es muy sencillo, es ejecutar el comando seguido de una opción:

wowadmin.sh [opcion]

Las opciones son:

  • start : Inicia los servicios authserver y worldserver.
  • stop : Detiene los servicios authserver y worldserver.
  • restart : Reinicia los servicios authserver y worldserver.
  • wstart : Inicia tan solo el servicio worldserver.
  • wdstart : Inicia el servicio worldserver en modo DEBUG.
  • wrestart : Reinicia el servicio worldserver.
  • wstop : Detiene el servicio worldserver.
  • wmonitor : Muestra en consola el proceso worldserver.
  • astart : Inicia el servicio authserver.
  • arestart : Reinicia el servicio authserver.
  • astop : Detiene los servicios authserver y worldserver.
  • amonitor: Muestra en consola el proceso authserver.

¿Qué es screen y para que sirve en este caso?

El programa screen permite en los sistemas GNU/Linux, abrir múltiples instancias de terminal dentro de una sola sesión. De esta manera, si salimos de una de las instancias de terminal, el proceso que se ejecute en dicha terminal no se interrumpirá y continuará en segundo plano.

Veamos un pequeño ejemplo de como funciona:

Para iniciar ambos servicios he ejecutado el comando:

$ wowadmin.sh start

Como podéis comprobar, los servicios están en marcha y la consola me ha devuelto el prompt. Ahora puedo abrir cualquier terminal, incluso remotamente conectándome por SSH y puedo ver el proceso del emulador. Tan solo debo ejecutar la orden:

$ wowadmin.sh wmonitor
Opciones del AutoRestarter para Wow

Si os fijáis en la última línea, me dice que puedo salir del monitoreo del servidor sin apagarlo pulsando simultáneamente las teclas ctrl + a + d. En unos pocos segundos, ya aparecerá la consola del emulador:

Funcionamiento del AutoRestarter para emuladores Wow

Solamente podemos tener un monitor activado. Si quiero abrir la terminal pero la tengo en otro lugar me avisa que cierre la sesión anterior.

Recordad que salimos con las teclas ctrl + a + d, pero los servicios no se detendrán, pudiendo entrar y salir las veces necesarias y de cualquier terminal.

Y con esto ya terminamos la guía de como utilizar el AutoRestarter para emuladores de Wow. Podemos aplicarlo a las guías que hay creadas de puesta en marcha de emuladores.


Enlaces relacionados:

Servidor de Wow Classic en Debian

Servidor WotLK en Linux

Descarga:

https://gitlab.com/catlinux/autorestarter-wow/-/archive/master/autorestarter-wow-master.zip

Fuentes:

https://gitlab.com/catlinux/autorestarter-wow

https://www.getmangos.eu/

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *