Bukkit服务器我一直用GNU Screen跑,隔两天有时候会不稳定要重启。好麻烦根本就不关心为什么,搞定就行。有bukkit插件可以实现但是咱多没自尊用那个。虽然感觉bash操作Screen也挺邋遢的.. 但是好用!其实不然的话怎么操作后台,nohup倒腾输入流什么的太麻烦了,这种用途还是terminal模拟器好看。
#!/bin/bash #/home/bukkit/restart.sh i=0 while (( $i < 5 )) do if [ "`ps aux|grep -e '^bukkit'|grep SCREEN`" != "" ]; then su bukkit -c 'screen -S bukkit -X stuff 'stop`echo -ne '\015'`'' #`echo -ne '\015'` 等于敲下回车 echo "`date` restart.sh:" 'Stoping bukkit...' ((i+=1)) sleep 5 else ((i+=100)) fi done if (( $i == 100 )); then echo "`date` restart.sh:" 'Bukkit was not running. Starting...' fi if (( $i == 5 )); then kill `ps aux|grep bukkit|awk '{print $2}'` echo "`date` restart.sh:" 'Forcibly killing bukkit...' sleep 1 fi if [ "`ps aux|grep -e '^bukkit'|grep SCREEN`" != "" ]; then echo "`date` restart.sh:" "ERROR: Couldn't stop bukkit. Exiting." exit 1 fi bash /home/bukkit/start.sh exit 0
#!/bin/bash #/home/bukkit/start.sh if [ "`ps aux|grep -e '^bukkit'|grep SCREEN`" == "" ]; then echo `date` start.sh: "Starting bukkit..." su bukkit -c "screen -dmS bukkit java -Xincgc -Xmx1000m -jar /home/bukkit/craftbukkit-1.6.4-R2.0.jar" echo `date` start.sh: "Done." # else # echo `date` start.sh: "Bukkit is already running." fi exit 0
加到cron里就好,第一行是因为有时候服务器会挂掉..
*/5 * * * * bash /home/bukkit/start.sh >> /home/bukkit/cron.log
0 0 * * * bash /home/bukkit/restart.sh >> /home/bukkit/cron.log
如果不把输出导走会给你一堆mails