今天分享一个定时重启魔兽服务器的shell脚本

#!/bin/bash
echo 'start svn'
su - www -c "svnserve --listen-port=9527 -d -r /home/www/svnroot"
sleep 3
echo 'bak dbs'
/home/ubuntu/sql.sh
#su zero
sleep 10
echo 'start worldserver'
su - zero -c "screen -dmS worldserver /home/zero/server/bin/worldserver"
sleep 1
echo 'wating 10ms'
sleep 10
echo 'start auth'
su - zero -c "screen -dmS authserver /home/zero/server/bin/authserver"
sleep 1
echo 'done!'

虽然服务器跑起来一般除了更新打补丁之外,几乎不需要重启。

但是,考虑到定时重启可以刷新“冬拥湖”战场以及释放内存。

所以,有必要让魔兽服务也每天定时重启一下。

既然有这个想法,就询问了一下服务器上的人。给出的无人时段在凌晨5-6点之间。

简单筹备了一下。设定如下重启计划:

1、5.13服务器执行reboot命令(重启)

2、5.18服务器启动版本库svn。

3、5.20服务器执行数据库备份命令。主要是用户表auth、角色表characters以及世界表world

4、5.23执行worldserver启动(使用screen启动,并挂起)

5、5.25执行authserver启动(使用screen启动,并挂起)

首先是使用linux的计划任务crontab。

在crontab 设置每天凌晨5.13 执行reboot命令。

然后在增加一条指令在重启后执行你的服务器启动脚本。

13 5 * * * reboot
@reboot /root/restart.sh

这个两行命令的意思是:在每天的5.13分执行reboot。在每次reboot之后执行 /root/restart.sh

接下来,就开始写启动命令。

首先是我们使用root执行shell脚本,需要切换用户去启动对应的服务。

svn服务假设在www用户下,魔兽相关在zero用户下,数据库备份在root用户下。

echo ‘start svn’ #这意思是说:打印出来我正在启动svn

su – www -c “svnserve –listen-port=9527 -d -r /home/www/svnroot”

上面这句:使用su命令 指定 用户www 执行”svnserve –listen-port=9527 -d -r /home/www/svnroot”,也就是说,启动一个svn的守护进程监听“9527”端口。

sleep 3

这行命令的意思是说,延迟3秒后往下执行。

备份sql的sh是root用户的,无须su,直接执行即可。

最后,解释一下启动魔兽服务器的指令:

su – zero -c “screen -dmS worldserver /home/zero/server/bin/worldserver”

首先是切换zero用户,执行screen 参数-dmS 也就是说,我们用screen 注册一个窗口名字为worldserver的进程去执行/home/zero/server/bin/worldserver,并且直接挂起。

这样一来,每次登录服务器之后,通过screen -ls 就可以查看魔兽服务器运行的状态了。

经测试可用。

=======重要补充==========

因为我的服务器使用的是TrinityCore核心,并且启用了eluna。使用上述自动重启脚本后,发现eluna无法正确加载。经检查是因为screen 直接启动的是绝对路径的服务。但是Eluna的配置写的却是相对路径。

所以要打开服务etc目录,修改worldserver.conf中关于eluna的配置。将加载目录修改为绝路径。

如下图: