#!/bin/sh # athena starting script by rowla # chkconfig: 345 99 01 # description: start and stop athena service PATH=./:$PATH L_SRV=./bin/login-server C_SRV=./bin/char-server M_SRV=./bin/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 [ ! -d ./conf/import ]; then mkdir ./conf/import fi if [ ! -f ./save/account.txt ]; then i=0 while [ $i -le 4 ]; do echo -e "$i\ts`expr $i + 1`\tp`expr $i + 1`\t-\tS\t0\t0\r" >> save/account.txt i=`expr $i + 1` 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 i=0 while [ $i -le 19 ]; do echo -e "$i,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0\r" >> save/castle.txt i=`expr $i + 1` done fi if [ ! -f ./conf/import/atcommand_conf.txt ]; then echo -n > conf/import/atcommand_conf.txt fi if [ ! -f ./conf/import/battle_conf.txt ]; then echo -n > conf/import/battle_conf.txt fi if [ ! -f ./conf/import/char_conf.txt ]; then echo -n > conf/import/char_conf.txt fi if [ ! -f ./conf/import/inter_conf.txt ]; then echo -n > conf/import/inter_conf.txt fi if [ ! -f ./conf/import/login_conf.txt ]; then echo -n > conf/import/login_conf.txt fi if [ ! -f ./conf/import/map_conf.txt ]; then echo -n > conf/import/map_conf.txt 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 } process_check() { # check login server if [ ! -f ${L_SRV}.pid ]; then login=0 else login=`cat ${L_SRV}.pid` login=$(ps ax | grep "${L_SRV}" | grep "${login}" | wc -l) fi # check char server if [ ! -f ${C_SRV}.pid ]; then char=0 else char=`cat ${C_SRV}.pid` char=$(ps ax | grep "${C_SRV}" | grep "${char}" | wc -l) fi # check map server if [ ! -f ${M_SRV}.pid ]; then map=0 else map=`cat ${M_SRV}.pid` map=$(ps ax | grep "${M_SRV}" | grep "${map}" | wc -l) fi # echo "check: ${login} ${char} ${map}" echo `expr ${login} + ${char} + ${map}` } case $1 in 'start') if [ `process_check` -eq 0 ]; then 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 nice -n -20 ${M_SRV} ${M_SRV_C} ${M_SRV_C2} ${M_SRV_C3} ${M_SRV_C4} ${M_SRV_C5} ${M_SRV_C6}& 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." else echo "Athena is already running..." fi ;; 'stop') # check map server if [ -f ${M_SRV}.pid ]; then map=`cat ${M_SRV}.pid` map=$(ps ax | grep "${M_SRV}" | grep "${map}" | wc -l) if [ ${map} -ne 0 ]; then kill `cat ${M_SRV}.pid` fi fi # check char server if [ -f ${C_SRV}.pid ]; then char=`cat ${C_SRV}.pid` char=$(ps ax | grep "${C_SRV}" | grep "${char}" | wc -l) if [ ${char} -ne 0 ]; then kill `cat ${C_SRV}.pid` fi fi # check login server if [ -f ${L_SRV}.pid ]; then login=`cat ${L_SRV}.pid` login=$(ps ax | grep "${L_SRV}" | grep "${login}" | wc -l) if [ ${login} -ne 0 ]; then kill `cat ${L_SRV}.pid` fi fi ;; 'kill') # check map server if [ -f ${M_SRV}.pid ]; then map=`cat ${M_SRV}.pid` map=$(ps ax | grep "${M_SRV}" | grep "${map}" | wc -l) if [ ${map} -ne 0 ]; then kill -9 `cat ${M_SRV}.pid` fi fi # check char server if [ -f ${C_SRV}.pid ]; then char=`cat ${C_SRV}.pid` char=$(ps ax | grep "${C_SRV}" | grep "${char}" | wc -l) if [ ${char} -ne 0 ]; then kill -9 `cat ${C_SRV}.pid` fi fi # check login server if [ -f ${L_SRV}.pid ]; then login=`cat ${L_SRV}.pid` login=$(ps ax | grep "${L_SRV}" | grep "${login}" | wc -l) if [ ${login} -ne 0 ]; then kill -9 `cat ${L_SRV}.pid` fi fi ;; 'restart') if [ `process_check` -eq 0 ]; then $0 start else # check login server if [ ! -f ${L_SRV}.pid ]; then login=0 else login=`cat ${L_SRV}.pid` login=$(ps ax | grep "${L_SRV}" | grep "${login}" | wc -l) fi if [ ${login} -eq 0 ]; then exec ${L_SRV} ${L_SRV_C}& fi # check char server if [ ! -f ${C_SRV}.pid ]; then char=0 else char=`cat ${C_SRV}.pid` char=$(ps ax | grep "${C_SRV}" | grep "${char}" | wc -l) fi if [ ${char} -eq 0 ]; then exec ${C_SRV} ${C_SRV_C} ${C_SRV_C2}& fi # check map server if [ ! -f ${M_SRV}.pid ]; then map=0 else map=`cat ${M_SRV}.pid` map=$(ps ax | grep "${M_SRV}" | grep "${map}" | wc -l) fi if [ ${map} -eq 0 ]; then exec ${M_SRV} ${M_SRV_C} ${M_SRV_C2} ${M_SRV_C3} ${M_SRV_C4} ${M_SRV_C5} ${M_SRV_C6}& fi fi ;; *) echo "Usage: athena-start { start | stop | kill | restart }" ;; esac