Ru-MaNGOS

Ru-MaNGOS (http://ru-mangos.ru/index.php)
-   Установка MaNGOS (http://ru-mangos.ru/forumdisplay.php?f=25)
-   -   Сервер Мангос как сервис в Linux (http://ru-mangos.ru/showthread.php?t=2069)

WildLynx 09.08.2010 05:14

Сервер Мангос как сервис в Linux
 
Есть юзер (простой, специально создан для этого), у него в home лежит папка с установленным мангосом(zero)
OS - Mandriva 2010 x64

Вопрос:
Как написать скрипты, что бы mangos-realmd и mangos-world запускались при старте системы как сервис, в правильном порядке, и естественно, после основных системных сервисов типа сети и шоревола?
При этом, от имени простого юзера (возможно модифицированного для этой цели).
Желательно, кончно, что бы плюшки типа
service mangos restart
работали корректно, то есть аккуратная остановка и запуск в правильном проядке.
И, если это возможно, с рестартером, который просто перезапускает сервис в случае крэша. (ну это совсем шикарно было бы конечно)

P.S.

Если это здесь лежит, просьба потыкать меня туда носом, я не нашел. Всё что я встречал - это рестартеры под виндовс, да ещё и с окнами.

Vladimir 09.08.2010 05:22

незнаю почему эо в этом разделе. Так как нет никаких различий в сетвом и стартующем коде для веток мангоса ...

WildLynx 09.08.2010 10:48

Цитата:

Сообщение от Vladimir (Сообщение 12285)
незнаю почему эо в этом разделе. Так как нет никаких различий в сетвом и стартующем коде для веток мангоса ...

Я этого не знал, и подозревал, что полный мангос может иметь отличия, например готовую систему запуска. Ведь кроме 0.5-0.6 и zero, я никакие другие версии у себя не ставил.

Модераторы: Что мне делать? Перенести тему в другой раздел я не могу, снести в мусор тоже. Есть возможность перенести её в более подходящий раздел или пусть уж теперь тут висит?

Vladimir 10.08.2010 16:38

Перенес.

Gen1us2k 11.08.2010 10:47

хм.. писано на коленке.. будет стартовать и останавливать сервер
Код:

#!/bin/bash
case "$1" in
start) echo -n "Starting server"
sudo -u user ~user/server/bin/mangos.sh
sudo -u user ~user/server/bin/realmd.sh
echo "..."
;;
stop) echo -n "Stoping server"
kill -9 `lsof -i -n -P | grep -e "TCP.*:8085" | head -n1 | awk '{print $2}'`
kill -9 `lsof -i -n -P | grep -e "TCP.*:3724" | head -n1 | awk '{print $2}'`
*) echo "Usage: /etc/init.d/server start|stop"
exit 1
;;
esac
exit 0

где mangos.sh
Код:

#!/bin/sh

CMDNAME='mangos-worldd'
RESTARTCMD='/путь/до/папки/с/сервером/bin/mangos-worldd'
SLEEPTIME=1
while test 1
do
    OUTPUT=`ps ax | grep $CMDNAME | grep -v grep`
 
    if ! echo $OUTPUT | grep $CMDNAME 1>/dev/null ; then
        echo Restarting service...
        $RESTARTCMD
    else
        echo Server Online...
    fi
    sleep $SLEEPTIME
done

realm.sh
Код:

#!/bin/sh

CMDNAME='mangos-realmd'
RESTARTCMD='/путь/до/папки/с/сервером/bin/mangos-realmd'
SLEEPTIME=1
while test 1
do
    OUTPUT=`ps ax | grep $CMDNAME | grep -v grep`
 
    if ! echo $OUTPUT | grep $CMDNAME 1>/dev/null ; then
        echo Restarting service...
        $RESTARTCMD
    else
        echo Server Online...
    fi
    sleep $SLEEPTIME
done

с мандривой не работал. Но думаю что там init скрипты. ложим это дело в /etc/init.d/, называем mangos, даем права на запуск (chmod +x)
и потом пробуем service mangos start.
Если нет, будем думать дальше.
можно запихнуть 2 строчки
Код:

sudo -u user ~user/server/bin/mangos.sh
sudo -u user ~user/server/bin/realmd.sh

в /etc/rc.local
Если оно конечно есть...
UPD: скриптец в /etc/init.d и симлинк с префиксом S99 на него в /etc/rc5.d
Даж с рестартером :)

WildLynx 12.08.2010 09:09

Спасибо, попробую, когда народ разбежится с сервера.
Вопрос такой:
префих симлинка типа S199 покатит? S99 уже занято и близкие тоже.
Хотя, наверно, не обязательно запускать его совсем последним, можно затесать среди каких нибудь неважных сервисов, которые в конце грузятся, главное после mysql...

Gen1us2k 12.08.2010 09:16

S99script_name такой симлинг
можно S98, 97,96,95\
S - стартовать 99 порядок в очереди

WildLynx 12.08.2010 09:41

Цитата:

Сообщение от Gen1us2k (Сообщение 12464)
S99script_name такой симлинг
можно S98, 97,96,95\
S - стартовать 99 порядок в очереди

Это я уже понял, меня интересовало, не поймёт ли init номер сервиса за пределами 2х цифр

Gen1us2k 12.08.2010 10:14

не знаю. надо пробовать

WildLynx 12.08.2010 15:57

Спасибо, удалось!

Правда, пришлось несколько изменить:

mangos, главгый скрипт для сервиса
добавил ;; перед *) - ошибка синтаксиса?
убрал -9 после kill - для аккуратной остановки с ret code 0
Кстати, зачем такой сложный (через номер порта) способ остановки?

Код:

killall mangos-realmd
хуже?

Код:

#!/bin/bash
case "$1" in
start) echo -n "Starting server"
sudo -b -u mangos /home/mangos/mangoszero/bin/realm.sh
sudo -b -u mangos /home/mangos/mangoszero/bin/mangos.sh
echo "..."
;;
stop) echo -n "Stoping server"
kill  `lsof -i -n -P | grep -e "TCP.*:8085" | head -n1 | awk '{print $2}'`
kill  `lsof -i -n -P | grep -e "TCP.*:3724" | head -n1 | awk '{print $2}'`
;;
*) echo "Usage: /etc/init.d/server start|stop"
exit 1
;;
esac
exit 0

realm.sh
увеличил SLEEPTIME и добавил возможность нормально остановить сервер
иначе главный скрипт был бы не в состоянии его остановить

Код:

#!/bin/sh

CMDNAME='mangos-realmd'
RESTARTCMD='/home/mangos/mangoszero/bin/mangos-realmd'
SLEEPTIME=5
while test 1
do
    OUTPUT=`ps ax | grep $CMDNAME | grep -v grep`

    if ! echo $OUTPUT | grep $CMDNAME 1>/dev/null ; then
        echo Restarting service...
        $RESTARTCMD
        if [ $? = 0 ]; then
                echo Normal Exit
                exit
            fi
    else
        echo Server Online...
    fi
    sleep $SLEEPTIME
done


mangos.sh
аналогично
Код:

#!/bin/sh

CMDNAME='mangos-worldd'
RESTARTCMD='/home/mangos/mangoszero/bin/mangos-worldd'
SLEEPTIME=5
while test 1
do
    OUTPUT=`ps ax | grep $CMDNAME | grep -v grep`

    if ! echo $OUTPUT | grep $CMDNAME 1>/dev/null ; then
        echo Restarting service...
        $RESTARTCMD
        if [ $? = 0 ]; then
                echo Normal Exit
                exit
            fi
    else
        echo Server Online...
    fi
    sleep $SLEEPTIME
done

Пришлось в настройках мангоса прописать все пути как абсолютные
С 3х значным номером возиться не стал, был не занятый S93, его и занял

Нормально?

Gen1us2k 12.08.2010 16:22

Да нормально.
В главном скрипте просто забыл добавить ;;
Все скрипты писались и не тестировались :)
у меня в принципе рестартеры нормально работают. Через killall я не тестил. Получаю PID процесса и его грохал :)
У меня просто стартуются сервер через screen
Код:

screen -AmdS world /home/mangos/servers/pve/bin/mangos.sh
screen -AmdS realm /home/mangos/servers/pve/bin/realm.sh

и я килляю их
Код:

kill `screen -ls| grep world | awk -F . '{ print $1 }'`
Ну а так, если получилось, замечательно ведь :)

Ну, раз разобрались, значит хорошо :) а Решение ваше скиньте в соседний топик


Текущее время: 13:51. Часовой пояс GMT +3.

ru-mangos.ru - Русское сообщество MaNGOS