LINUX.ORG.RU
ФорумAdmin

перезапуск процесса после падения оного


0

1

Доброго времени суток всем. Я админю ИС Айон, сервера (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 $?

поиск не работает что ли?

*/5 * * * * pgrep -f process_name &>/dev/null || process_name

zolden ★★★★★
()

При запуске процесс пишет в лог PID, которые я потом по крону проверяю. Если нет -> запуск. Если проблемы -> остановить, запуск.

soomrack ★★★★★
()

вот как раз сегодня троян обнаружил у себя. у него было свое расписание для крона с запуском своего скрипта. скрипт проверял наличие файла с pid'ом процесса. если тот отсутствовал, то запускал демона. еще там перезапуск процесса был в зависимости от различных условий. вот то же самое нужно и тебе.

anonymous
()

На правах бреда.

То что описали выше, с cron'ом, это просто вариант. В данном случае он, пожалуй, правильный. А вообще есть программы для мониторинга состояния сервисов. Надеюсь знатоки подскажут названия.

Camel ★★★★★
()
Ответ на: На правах бреда. от Camel

>> Надеюсь знатоки подскажут названия.

Не совсем знаток, но подскажу: daemontools, monit. Первое достаточно просто, со вторым не знаком.

GotF ★★★★★
()

А ещё есть механизм, где всё сделано до нас - запуск из /etc/inittab ;)

router ★★★★★
()
Ответ на: комментарий от GotF

еще net-snmpd умеет следить и запускать упавшие процессы

Rost ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.