Биллинговая система Nodeny
21 Ноября 2024, 18:11:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]
  Печать  
Автор Тема: rc-скрипт  (Прочитано 7855 раз)
elite
Начальник планеты
NoDeny
Спец
*

Карма: 52
Offline Offline

Сообщений: 1226

In LAN we trust!

358714596
Просмотр профиля
« : 29 Июля 2009, 15:03:23 »

Вот сделал такой вот rc скрипт
Код:
#!/bin/sh


# PROVIDE: nodeny
# REQUIRE: LOGIN mysql


. /etc/rc.subr

name="nodeny"
rcvar=`set_rcvar`
start_cmd="${name}_start"
stop_cmd=":"

load_rc_config $name

: ${nodeny_enable="NO"}
: ${nodeny_dir="/usr/local/nodeny"}

nodeny_start()
{
    cd $nodeny_dir
    sleep 10
    echo "Starting $name..."
    nohup sh go_kernel.sh &
    nohup sh go_noserver.sh &
    nohup sh go_nol2auth.sh &
}

run_rc_command "$1"
Вот встал вопрос, как сделать не только start, но и stop, и restart?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #1 : 30 Июля 2009, 15:00:57 »

это надо в скриптах предусмотреть pid-файл. Предусмотрю в след версиях...
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #2 : 06 Августа 2009, 10:19:09 »

Сделал поддержку pid-файлов в noserver.pl и nol2auth.pl.

Рестарт скрипта:
kill -HUP `cat /var/run/noserver.pid`

Убитие скрипта:
kill -TERM `cat /var/run/noserver.pid`

Напомню как работает рестарт скриптов. Есть маленький скрипт-вертушка go_noserver.sh,
который запускает noserver.pl, если происходит выход из noserver.pl - он снова запускается. Т.е. для того чтобы сделать рестарт необходимо просто прибить noserver.pl и он будет заново запущен.

Небольшое уточнение: go_noserver.sh смотрит на код, который возвращает noserver.pl, если
0 (получен сигнал HUP): снова запускается noserver.pl
1 (получен сигнал TERM): происходит завершение самого go_noserver.sh

Кстати, не посылайте сигнал -INT т.к. он прибивает процесс, а pid-файл остается. Ничего страшного при этом не произойдет - при запуске noserver.pl мониторит актуальный ли pid. Однако стартовый скрипт будет неправильно функционировать. Кстати вот он:

Код:
#!/bin/sh

. /etc/rc.subr

name="noserver"
rcvar=`set_rcvar`

: ${noserver_enable="YES"}
: ${nodeny_dir="/usr/local/nodeny"}


start_cmd="${name}_start"
stop_cmd="${name}_stop"
restart_cmd="${name}_restart"


pidfile="/var/run/${name}.pid"

noserver_start()
{
    cd $nodeny_dir
    echo -n "Starting $name..."
    sh go_noserver.sh &
    echo "OK"
}

noserver_stop()
{
    cd $nodeny_dir
    echo "Stopping $name..."
    pid=`cat $pidfile 2>/dev/null`
    if [ $pid ];
    then
       kill -TERM $pid;
       echo -n "Waiting pid $pid "
       while true
       do
         if [ ! -f "$pidfile" ]; then break; fi
         sleep 1
       done
    fi
    echo "OK"
}

noserver_restart()
{
    noserver_stop   
    noserver_start
}

load_rc_config $name
run_rc_command "$1"

Вообще, он избыточен в том плане, что есть стандартный механизм (/etc/rc.subr) выполнения start/stop/restart/reload путем посылки сигналов процессам. Однако, я потратил дофига времени, но так и не понял, почему /etc/rc.subr не нравится мой pid-файл, видит его, но не признает) Копаться в самом rc.subr было лень. Если кто знает в чем причина - пишите
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #3 : 06 Августа 2009, 10:19:51 »

Уточнение: будет работать только с новой версией - в текущих нет поддержки pid-файлов. Новая выйдет совсем скоро
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Offline Offline

Сообщений: 4790



Просмотр профиля
« Ответ #4 : 06 Августа 2009, 10:21:27 »

Да, и забйл в начало скрипта кинуть:

Код:
# PROVIDE: nodeny
# REQUIRE: LOGIN mysql
Записан
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!