Доброго времени суток всем. Я админю ИС Айон, сервера (loginserver, chatserver & gameserver) стартуют с помощью демона автоматически, вместе со всеми остальными процесами. На том же сервере, что и ИС стоит и web-сервер (сисадмин к сожалению отдельный сервер выделить по крайней мере пока под веб не может), время от времени происходит падение апача, абсолютно непредсказуемо берёт и отваливается. В связи с выше описанным у меня такой вопрос: Можно ли написать какой-то скрипт который проверял бы запущен ли тот или иной процесс и если он отвалился, то чтобы запускал, это первый вопрос, второй: как можно реализовать рестарт gameserver(a) в случае загрузки им ЦП >хх% или просто хотя бы в том же демоне реализовать операцию перезагрузки? Там только запуски и останов реализованы и то по моему не робят, пробовал раз остановить сервера, но эффекта от выполнения команды ./aion stop как-то не заметил... так выглядит демон запуска/останова серверов айона: #!/bin/sh # # description: Start/Stop AioN Server #
RUNPATH=«/...». GAMEEXEC=«java -server -Xms128m -Xmx1536m -ea -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*:ax-game-1.0.1.jar gameserver.GameServer /config/default.config LOGINEXEC=„java -Xms8m -Xmx32m -ea -Xbootclasspath/p:./libs/jsr166.jar -cp ./libs/*:ax-login-1.0.1.jar loginserver.LoginServer > log/stdout.log 2>&1“ CHATEXEC=„java -Xmx512m -cp ./libs/*:ax-chat-1.0.1.jar chatserver.ChatServer > log/stdout.log 2>&1“
GAME_PID=$(ps ux | awk '/al-game/ && !/awk/ {print $2}') LOGIN_PID=$(ps ux | awk '/al-login/ && !/awk/ {print $2}') CHAT_PID=$(ps ux | awk '/al-cserver/ && !/awk/ {print $2}')
start() { if [ -z »$LOGIN_PID" ]; then echo -n «Starting Aion-Unique Login Server...» cd $RUNPATH/loginserver screen -A -m -d -S aion.login $LOGINEXEC echo «OK» else echo «Aion-Unique Login Server is already started...» fi
if [ -z «$CHAT_PID» ]; then echo -n «Starting Aion-Unique Chat Server...» cd $RUNPATH/chatserver screen -A -m -d -S aion.chat $CHATEXEC echo «OK» else echo «Aion-Unique Chat Server is already started...» fi
if [ -z «$GAME_PID» ]; then echo -n «Starting Aion-Unique Game Server...» cd $RUNPATH/gameserver screen -A -m -d -S aion.game $GAMEEXEC echo «OK» else echo «Aion-Unique Game Server is already started...» fi
return 0 } stop() { echo -n «Stoping Aion-Unique Services...»
if [ ! -z «$LOGIN_PID» ]; then kill $LOGIN_PID fi
if [ ! -z «$GAME_PID» ]; then kill $GAME_PID fi if [ ! -z «$CHAT_PID» ]; then kill $CHAT_PID fi ........ sleep 30
echo «OK»
return 0 }
case «$1» in start) start ;; stop) stop ;; *) echo $«Usage: $0 (start|stop)» exit 1 esac
exit $?