LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 668|回复: 2

这个脚本到底哪里出错了呢?希望各位大大能帮我看看

[复制链接]
发表于 2004-6-26 21:06:46 | 显示全部楼层 |阅读模式
第一个程序名为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  才行。找了半天,就是不知道哪里出错了,希望各位大大能帮帮我~~~~~
发表于 2004-6-27 02:16:38 | 显示全部楼层
呵呵,看不明白 :sorry
发表于 2004-6-28 02:04:15 | 显示全部楼层
只看到一些蚂蚁在爬
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表