Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

MyDC.ru _ Технические вопросы по RusHub'у _ [BASH] Старт/Стоп/Перезапуск и пр.

Автор: ShadoWx 1.8.2011, 13:42

Предлагаю скрипт запуска, остановки и перезапуска rushub'a:
Не забудьте изменить параметры скрипта: директории и пути.

Просмотр кода bash
Код
#!/bin/sh

### BEGIN INIT INFO
# Provides:          rushub
# Required-Start:    $network
# Required-Stop:     $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by rushub.
### END INIT INFO

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

NAME="RusHub"
PATH_DAEMON="/home/shadowx/rushub_bin"
DAEMON="$PATH_DAEMON/$NAME"
PATH_DAEMON_CFG="$PATH_DAEMON/RusHub.xml"
PIDF="$PATH_DAEMON/rushub.pid"

ARGS="-c $PATH_DAEMON_CFG"

USER="shadowx"

start() {
    echo -n "Запуск $NAME: "
    start-stop-daemon --start --chuid $USER --make-pidfile "$PIDF" --pidfile "$PIDF" --name $NAME --background --startas $DAEMON -- $ARGS
    echo "готово."
}
stop() {
    echo -n "Остановка $NAME: "
    start-stop-daemon --chuid $USER --stop --pidfile "$PIDF" --name $NAME --retry=TERM/5/KILL/10
    rm "$PIDF"
    echo "готово."
}
restart() {
    stop
    sleep 2
    start
}

if [ ! -x "$DAEMON" ]
then
   echo "отсутствует файл для запуска $DAEMON"
   exit 0
fi

case "$1" in
    start)
        start
;;
    stop)
        stop
;;
    restart)
        restart
;;
    status)
        if [ -f "$PIDF" ];
        then
            PID=$(cat $PIDF)
            if [ `ps auwx|grep $NAME|grep $PID|grep -v -c grep` = 1 ]
            then
                echo "процесс $NAME работает [pid: $PID]."
                exit 0
            fi
            echo "процесс $NAME не запущен."
            exit 3
        fi
        echo "процесс $NAME не запущен."
        exit 3
;;
    *)
        echo "Использование {start|status|stop|restart}"
        exit 1
;;
esac
exit 0

Автор: CrazyKiller 1.8.2011, 20:15

Случаем не со Skeleta делали ?

Усе ровно отлично, гуд, так держать ! big_smile.gif

Автор: ShadoWx 1.8.2011, 20:26

в интернете почитал про баш с примерами и пр. и навело на мысль а почему бы и нет ? .... вот пользуйтесь ..

Автор: CrazyKiller 1.8.2011, 20:45

Не Могу понять чуток !
Скрипт от Рута или от пользователя будет запускаться ?

Автор: ShadoWx 1.8.2011, 20:53

Цитата(CrazyKiller @ 1.8.2011, 21:45) *
Не Могу понять чуток !
Скрипт от Рута или от пользователя будет запускаться ?


назови скрипт rushub и положи в директорию:
Код
/etc/init.d/


и да от рута .....

Автор: CrazyKiller 1.8.2011, 20:57

Цитата(ShadoWx @ 1.8.2011, 21:53) *
назови скрипт rushub и положи в директорию:
Код
/etc/init.d/


и да от рута .....


это плоха что от рута !
Береги систему !

su USER -c "ПУТЬ/ПУТЬ/RusHub -d"

Используй такие строки !

Заменяя USER = на своего юзера системы при котором будет производится запуск !
ну путь это и так понятно ! big_smile.gif

Автор: ShadoWx 1.8.2011, 20:57

запуск скрипта у меня не от рута ...извини напутал ..с тренировки пришел ...

у меня хаб вертится на отдельном юзвере ))

Автор: mariner 1.8.2011, 21:44

Перенесено в техвопросы

Автор: Saymon21 2.8.2011, 2:04

а ulimit -n забыто тоже? Ведь таки получается, запускаем хаб на онлайн < 1020

Автор: Saymon21 2.8.2011, 23:53

Если кого мучает паранойа: "аааАА, упадёт хаб чо делать" - шлите репорты о падениях, а с моментом "авто"-перезапуска хаба есть вариант:

Код
#!/bin/sh
RESTART="service rushub start"
PGREP="/usr/bin/pgrep"
SERVICENAME="RusHub"
$PGREP ${SERVICENAME}
if [ $? -ne 0 ]
then
$RESTART
fi

Осталось только запихнуть задачу в крон и переодически дёргать скрипт. Но это уж сами. ;)
Да, 777 не нужно!!!! chmod +x
Кстати, любителям информативностей и т.п, можно перед $RESTART добавить echo "\n$(date) dcserver rushub was restarted" | mail -s rushub vasya_pupkin@yandex.ru

Автор: CrazyKiller 3.8.2011, 13:02

хыхы, у меня на УТФ-8 через пути Кракозяблы в данном скрипте ! big_smile.gif

К скрипту проверки !
А если так !

Код
#!/bin/sh

PROCESS_COUNT=$(ps -fu root | grep RusHub | grep -v grep | wc -l)
case $PROCESS_COUNT in
0) /path/to/RusHub -d
;;
1) #OK, программа уже выполняется
;;
*) #OK, запущено несколько экземпляров программы
;;
esac


и к нему Крон !

Код
*/1 * * * * /path/to/RusHub/checkrushub.sh >/dev/null 2>&1


Через каждый 1 час будет проверять, есть ли процесс или нет, если нет то включит !

Автор: ShadoWx 4.8.2011, 23:30

кто возьмется за финальный вид скрипта ?) после всего того что обсудили и сделали?)
или мы все коварные super_man.gif

думается мне было бы замечательно этот скрипт в исходники русхаба ..в папочку дебиан поместить ...

Автор: mariner 4.8.2011, 23:35

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

Автор: ShadoWx 4.8.2011, 23:36

Цитата(mariner @ 5.8.2011, 0:35) *
ручки прочь от исходников. В них и так все, что нужно. И это не проблема разработчика, писать инит-скрипты. Их должен писать сборщик.


ну так мы же за развитие русхаба в массах =)

Автор: mariner 4.8.2011, 23:44

Цитата
ну так мы же за развитие русхаба в массах =)

Ну так собирай пакеты, а не суй мусор в сурцы

Автор: KT315 5.8.2011, 13:41

Цитата(Saymon21 @ 2.8.2011, 3:04) *
а ulimit -n забыто тоже? Ведь таки получается, запускаем хаб на онлайн < 1020


И правильно сделано, кстати. Лимиты надо настраивать в /etc/security/limits.conf
Почему это оказалось в init? Да вот http://mydc.ru/r/?https://bugs.launchpad.net/ubuntu/+source/pam/+bug/65244/, но уже не актуально.