#!/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