#!/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的配置。将加载目录修改为绝路径。
如下图: