#!/bin/bash if [ -n "$1" ]; then dm=$1 else dm='_r' fi if [ -n "$2" ]; then path=$2 else path=`pwd` fi # check LogicServer while true; do sleep 8 datetime=`date "+%Y-%m-%d.%H:%M:%S"` ret=`ps x |grep $path/LogicServer/logicserver$dm|grep -v grep|grep -v "/bin/bash"|wc -l` if [ $ret == 0 ]; then $path/LogicServer/logicserver$dm $path/LogicServer/LogicServerLinux.txt > /dev/null & echo "[$datetime] $path/LogicServer/logicserver$dm $path/LogicServer/LogicServerLinux.txt" else pid=`top -bn 1 -i -c |awk '{ if (NR > 6) print }' |awk '{ if ($9 > 99) print $1}' |head -n1` if [[ -n $pid ]]; then echo "[$datetime] 开始结束服务器: $curdoc LogicServer (pid=$pid)" kill -15 $pid NUM=2 while true; do datetime=`date "+%Y-%m-%d.%H:%M:%S"` proc=`ps aux |grep $path|grep logicserver|grep -v grep|grep "\<$curdoc\>"|grep -v "/bin/bash"|wc -l` if [ $proc == 0 ]; then break fi if [ $NUM -lt 0 ]; then echo "[$datetime] 游戏服务 $curdoc LogicServer 强制结束" kill -9 $pid $path/LogicServer/logicserver$dm $path/LogicServer/LogicServerLinux.txt > /dev/null & echo "[$datetime] 游戏服务 $curdoc LogicServer 启动完毕" echo "--------------------------------------------------" break fi echo "[$datetime] 游戏服务 $curdoc LogicServer 结束中..." sleep 1 let NUM-- done fi fi done