30 сентября 2010 г. Debian FreeBSD Linux Svnserve Ubuntu

Скрипты инициализации для FreeBSD и Debian/Ubuntu

Для любого демона нужен скрипт управления чтобы его запускать, останавливать и т.д. Но не всегда в комплекте есть этот самый скрипт инициализации. Сегодня я расскажу как написать простейший скрипт инициализации для двух основных систем с которыми я работаю это FreeBSD и Debian/Ubuntu. Для примера будем разбирать демон svnserve, а запускать я буду все от пользователя www.

Пример скрипта для FreeBSD

Создадим файл /usr/local/etc/rc.d/svnserve

touch /usr/local/etc/rc.d/svnserve
chmod +x /usr/local/etc/rc.d/svnserve

Этот скрипт инициализации взят из поставки к порту subversion

#!/bin/sh

# PROVIDE: svnserve
# REQUIRE: DAEMON
# KEYWORD: shutdown

# Каждый rc.d должен "включать" в себя файл /etc/rc.subr (здесь для этого используется команда ".")
# перед тем как он вызовет функцию rc.subr(8). Наиболее предпочтительный вариант - сделать это перед
# любыми другими действиями.
. /etc/rc.subr

# Определяем параметры по умолчанию, вы можете указать инные в /etc/rc.conf, об этом чуть ниже
svnserve_enable=${svnserve_enable:-"NO"}
svnserve_flags=${svnserve_flags:-"-d --listen-port=3690 --listen-host 0.0.0.0"}
svnserve_data=${svnserve_data:-"/var/svn/repos"}
svnserve_user=${svnserve_user:-"www"}
svnserve_group=${svnserve_group:-"www"}

name=svnserve
rcvar=`set_rcvar`
load_rc_config $name
command=/usr/local/bin/svnserve.bin
command_args="-r ${svnserve_data}"

# $1 - это первый аргумент коммандной строки
# Например, если вы ввели "svnserve start", то $1 будет "start".
run_rc_command "$1"


Для автостарта при загрузке системы пропишите в /etc/rc.conf следующее:

svnserve_enable="YES"

Так же в /etc/rc.conf можно передавать параметры, которые будут заменять умолчательные

svnserver_user="www"
svnserver_group="www"
svnserver_data="/var/svn/repos"

Более подробнее о скрипте инициализации можно почитать на официальных страницах документации по FreeBSD:

Пример скрипта для Debian/Ubuntu

Создадим файл скрипта и pid-файл (для того чтобы хранить в нем PID нашего демона)

touch /etc/init.d/svnserve && chmod +x /etc/init.d/svnserve
touch /var/run/svnserve.pid && chown www:www /var/run/svnserve.pid

Теперь напишем сам скрипт, который можно будет запускать с помощью команды service или просто запуская скрипт и передавая ему параметры

#!/bin/sh

# параметры для запуска
svnserve_flags="-d --listen-port=3690 --listen-host 0.0.0.0 --log-file /var/log/svnserve.log --config-file /var/svn/svnserve.conf"

# храним путь до pid-файла, он нам понадобится для остановки демона
svnserve_pid_file="/var/run/svnserve.pid"

# путь до репозитория
svnserve_data="/var/svn/repos"

# пользователь от которого будем запускать демона
svnserve_user="www"

# путь до демона
command="/usr/local/bin/svnserve"

# аргументы для демона
command_args="-r ${svnserve_data}"

# команда start
start()
{
    # от имени пользователя www запускаем svnserve
    su $svnserve_user -c "$command $svnserve_flags --pid-file $svnserve_pid_file $command_args"
    echo "Svnserve start"
}

# команда stop
stop()
{
    # киляем svnserve
    su $svnserve_user -c "kill -9 `cat $svnserve_pid_file`"
    echo "Svnserve stop"
}

# команда restart, которая просто останавливает, ожидает 1 секунду и снова запускает демона
restart()
{
    stop
    sleep 1
    start
}

# теперь опишем при каких условиях запускать наши ф-ии
case "$1" in
    start)
        start
    ;;
    stop)
        stop
    ;;
    reload|restart)
        restart
    ;;
    *)
        # по умолчанию выводим небольшой help по испольщованию скрипта
        echo "Usage: {start|stop|restart}"
        exit 1
    ;;
esac

exit 0

Пример запуска демона

service svnserve start
/etc/init.d/svnserve start

Для автостарта при загрузке системы выполните

update-rc.d svnserve defaults

Что бы удалить из автостарта системы выполните

update-rc.d svnserve remove

или просто запретите права на запуск (chmod -x /etc/init.d/svnserve)

Резюме

Ну вот мы и научились писать простейшие скрипты инициализации. Каждый раз вам писать не придется, так как в комплекте к демону обычно идет скрипт инициализации. Если вы устанавливаете из какой-либо системы пакетов, то он сам поставится в "/etc/rc.d/" или "/usr/local/etc/rc.d/" для FreeBSD, а для Debian/Ubuntu в "/etc/init.d/".

Еще в скриптах инициализации принято писать комментарии, например вот так для Debian. Но если честно я не пишу, это больше нужно когда в поставку входит скрипт инициализации, а для себя это не важно.

Что бы включить автозапуск в Red Hat надо:
sudo /sbin/chkconfig <service> on
sudo /sbin/chkconfig --list <service>

Комментарии

Мишка, зачетная статья, спасибо.

Оставьте свой комментарий

Markdown