关灯
开启左侧

Linux下MANGOS服务端自动重启Shell启动脚本

  [复制链接]
admin实名认证 发表于 2016-4-23 17:32:51 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
 
下面是一个Linux下支持的一个启动服务端的Shell代码。可以实现服务端当机后自动重新启动。

同时可以支持LINUX下用GDB对mangos进行当机调试,输出结果到crashes/Server.log  ??

你需要根据你的魔兽私服单机版在Linux中的路径调整下面的文件

#! /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=/home/mangos/mangos-server/bin
WPATH=/home/mangos/mangos-server/bin
ASRV_BIN=realmd         #This usually doesnt change. TrinityCore: authserver  MaNGOS: realmd  ArcEmu: whocares?
WSRV_BIN_ORG=mangosd    #This usually doesnt change. TrinityCore: worldserver MaNGOS: mangosd ArcEmu: whocares?
WSRV_BIN=mangosd
WSRV_SCR=mangosd

echo "run" > gdbcommands
echo "shell echo -e \" CRASHLOG BEGIN \"" >> gdbcommands
echo "info program" >> gdbcommands
echo "shell echo -e \" BACKTRACE \"" >> gdbcommands
echo "bt" >> gdbcommands
echo "shell echo -e \" BACKTRACE FULL \"" >> gdbcommands
echo "bt full" >> gdbcommands
echo "shell echo -e \" THREADS \"" >> gdbcommands
echo "info threads" >> gdbcommands
echo "shell echo -e \" THREADS BACKTRACE \"" >> gdbcommands
echo "thread apply all bt full" >> gdbcommands

DEBUG=false

#WORLD FUNCTIONS
startWorld()
{
    if [ "$(screen -ls | grep $WSRV_SCR)" ]
    then
        echo $WSRV_BIN is already running
    else
        cd $WPATH
        screen -AmdS $WSRV_SCR $THIS_FULLPATH $WSRV_BIN $DEBUG
        echo $WSRV_BIN is alive
    fi
}

restartWorld()
{
    screen -S $WSRV_SCR -X stuff "saveall$(printf \ )"
    echo saved all characters, and server restart initialized
    screen -S $WSRV_SCR -X stuff "server restart 5$(printf \ )"
}

stopWorld()
{
    screen -S $WSRV_SCR -X stuff "saveall
    "
    echo saveall sent, waiting 5 seconds to kill $WSRV_BIN
    sleep 5
    screen -S $WSRV_SCR -X kill &>/dev/null
    echo $WSRV_BIN is dead
}

monitorWorld()
{
    echo press ctrl+a+d to detach from the server without shutting it down
    sleep 5
    screen -r $WSRV_SCR
}
#AUTH FUNCTIONS
startAuth()
{
    if [ "$(screen -ls | grep $ASRV_BIN)" ]
    then
        echo $ASRV_BIN is already running
    else
        cd $APATH
        screen -AmdS $ASRV_BIN $THIS_FULLPATH $ASRV_BIN
        echo $ASRV_BIN is alive
    fi
}

stopAuth()
{
    screen -S $ASRV_BIN -X kill &>/dev/null
    echo $ASRV_BIN is dead
}

restartAuth()
{
    stopAuth
    startAuth
    echo $ASRV_BIN restarted
}

monitorAuth()
{
    echo press ctrl+a+d to detach from the server without shutting it down
    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 stopped, restarting! | tee -a $THIS_FULLPATH.log
            echo crashlog available at: $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 stopped, restarting! | 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 stopped, restarting! | 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 Your argument is invalid
    echo "usage: start | stop | restart | wstart | wdstart | wrestart | wstop | wmonitor | astart | arestart | astop | amonitor"
    exit 1
    ;;
esac



下面是完整代码下载


游客,如果您要查看本帖隐藏内容请回复


标签:服务端Linux
 

精彩评论1

倒序浏览
conrus 发表于 2021-2-3 10:41:43 | 显示全部楼层
 

小白一个 顶一下,吾爱尚玩免费服务端下载!
 
VIP介绍
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 最佳新人

    注册账号后积极发帖的会员
  • 活跃会员

    经常参与各类话题的讨论,发帖内容较有主见
  • 热心会员

    经常帮助其他会员答疑
  • 推广达人

    积极宣传本站,为本站带来更多注册会员
  • 宣传达人

    积极宣传本站,为本站带来更多的用户访问量
  • 灌水之王

    经常在论坛发帖,且发帖量较大
  • 突出贡献

    长期对论坛的繁荣而不断努力,或多次提出建设性意见
  • 优秀版主

    活跃且尽责职守的版主
  • 荣誉管理

    曾经为论坛做出突出贡献目前已离职的版主
  • 论坛元老

    为论坛做出突出贡献的会员

0关注

5粉丝

3421帖子

排行榜
作者专栏

QQ交流群&&微信订阅号

QQ交流群

微信订阅号

吾爱尚玩资源基地永久域名:

Www.523Play.Com

在线管理员QQ:1589479632

邮箱:Email@523play.com

QQ交流群:558936238

Copyright   ©2015-2116  吾爱尚玩资源基地|523play.comPowered by©523Pplay.Com技术支持:吾爱尚玩资源基地