|
第一个程序名为startforever,具体如下.
# /bin/bash
maplog=~/mapHA.log
printf "1,`date "+%s"`" > $maplog
./athena-start start
sleep 30
while [ true ] ; do
if [ " 0" = "$(ps -ax | grep -e login | grep -e server | wc -l)" ] ||
[ " 0" = "$(ps -ax | grep -e char | grep -e server | wc -l)" ] ||
[ " 0" = "$(ps -ax | grep -e map | grep -e server | wc -l)" ]; then
printf "Error:"
sleep 10
if [ " 0" = "$(ps -ax | grep -e login | grep -e server | wc -l)" ] ||
[ " 0" = "$(ps -ax | grep -e char | grep -e server | wc -l)" ] ||
[ " 0" = "$(ps -ax | grep -e map | grep -e server | wc -l)" ]; then
printf "Restoration:"
printf ",`date "+%s"`\n" >> $maplog
./athena-start restart
printf "1,`date "+%s"`" >> $maplog
fi
fi
sleep 10
done
第二个程序名为athena-start,具体如下
#!/bin/sh
# athena starting script by rowla
PATH=./ PATH
L_SRV=login-server
C_SRV=char-server
M_SRV=map-server
L_SRV_C=./conf/login_athena.conf
C_SRV_C=./conf/char_athena.conf
C_SRV_C2=./conf/inter_athena.conf
M_SRV_C=./conf/map_athena.conf
M_SRV_C2=./conf/battle_athena.conf
M_SRV_C3=./conf/atcommand_athena.conf
M_SRV_C4=./conf/script_athena.conf
M_SRV_C5=./conf/msg_athena.conf
M_SRV_C6=./conf/grf-files.txt
print_start() {
# more << EOF
echo "Athena Starting..."
echo " (c) 2003 Athena Project."
echo " URL:http://project-yare.de/"
echo ""
echo "Debug informations will appear,"
echo "since this is a test release."
echo ""
echo "checking..."
#EOF
}
check_account() {
if [ ! -d ./save ]; then
mkdir ./save
fi
if [ ! -d ./log ]; then
mkdir ./log
fi
if [ ! -f ./save/account.txt ]; then
for i in `seq 0 4`
do
echo -e "$i\ts`expr $i + 1`\tp`expr $i + 1`\t-\tS\t0\t0\r" >> save/account.txt
done
fi
if [ ! -f ./save/athena.txt ]; then
echo -n > save/athena.txt
fi
if [ ! -f ./save/bank.txt ]; then
echo -n > save/bank.txt
fi
if [ ! -f ./save/guild.txt ]; then
echo -n > save/guild.txt
fi
if [ ! -f ./save/party.txt ]; then
echo -n > save/party.txt
fi
if [ ! -f ./save/pet.txt ]; then
echo -n > save/pet.txt
fi
if [ ! -f ./save/storage.txt ]; then
echo -n > save/storage.txt
fi
if [ ! -f ./save/castle.txt ]; then
for i in `seq 0 19`
do
echo -e "$i,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r" >> save/castle.txt
done
fi
}
check_files() {
for i in ${L_SRV} ${C_SRV} ${M_SRV} ${L_SRV_C} ${C_SRV_C} ${C_SRV_C2} ${M_SRV_C} ${M_SRV_C2} ${M_SRV_C3} ${M_SRV_C4} ${M_SRV_C5} ${M_SRV_C6}
do
if [ ! -f ./$i ]; then
echo "$i does not exist, or can't run."
echo "Stoped, Check your compile or configuration file."
exit 1;
fi
done
# more << EOF
echo "Check done."
echo "Looks good, have a nice athena!"
#EOF
}
case $1 in
'start')
print_start
# check_account
check_files
exec ./${L_SRV} ${L_SRV_C}&
# exec ./${C_SRV} ${C_SRV_C} ${C_SRV_C2} > /dev/null&
# exec ./${M_SRV} ${M_SRV_C} ${M_SRV_C2} > /dev/null&
exec ./${C_SRV} ${C_SRV_C} ${C_SRV_C2}&
exec ./${M_SRV} ${M_SRV_C} ${M_SRV_C2} ${M_SRV_C3} ${M_SRV_C4} ${M_SRV_C5} ${M_SRV_C6}&
echo "Now Started Athena."
;;
'stop')
ps -ax | grep -E "${L_SRV}|${C_SRV}|${M_SRV}" | awk '{print $1}' | xargs kill -9
while [ " 0" != "$(ps -ax | grep -e login | grep -e server | wc -l)" ] ||
[ " 0" != "$(ps -ax | grep -e char | grep -e server | wc -l)" ] ||
[ " 0" != "$(ps -ax | grep -e map | grep -e server | wc -l)" ]; do
sleep 1
done
;;
'restart')
$0 stop
$0 start
;;
*)
echo "Usage: athena-start { start | stop | restart }"
;;
esac
第三个程序名为start,具体如下
# /bin/bash
nohup ./startforever&
说明,这个程序适用于FreeBSD系统
在Linux系统下需做少量修改
" 0" 要改成 " 0"
启动服务器用 ./start
服务器所有输出全部存入nohup.out文件
作用是char-server,login-server,map-server 其中某个程序出错挂掉的话,能实现自动重启。
问题是,我照做了,也修改了,都不能实现出错后自动重启,只有手动输入./stop ./start 才行。找了半天,就是不知道哪里出错了,希望各位大大能帮帮我~~~~~ |
|