Скрипты инициализации для FreeBSD и Debian/Ubuntu
service
автозапуск
init.d
http://adw0rd.com/2010/9/30/init-scripts-for-freebsd-and-debian-ubuntu/
Для любого демона нужен скрипт управления чтобы его запускать, останавливать и т.д. Но не всегда в комплекте есть этот самый скрипт инициализации. Сегодня я расскажу как написать простейший скрипт инициализации для двух основных систем с которыми я работаю это FreeBSD и Debian/Ubuntu. Для примера будем разбирать демон svnserve, а запускать я буду все от пользователя www.
Пример скрипта для FreeBSD
Создадим файл /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 следующее:
Так же в /etc/rc.conf можно передавать параметры, которые будут заменять умолчательные
Пример скрипта для Debian/Ubuntu
Создадим файл скрипта и pid-файл для того чтобы хранить в нем PID нашего демона
touch /etc/init.d/svnserve && chmod +x /etc/init.d/svnservetouch /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
Пример запуска демона
Для автостарта при загрузке системы выполните
Что бы удалить из автостарта системы выполните
или просто запретите права на запуск chmod \-x /etc/init.d/svnserve
Резюме
Ну вот мы и научились писать простейшие скрипты инициализации. Каждый раз вам писать не придется, так как в комплекте к демону обычно идет скрипт инициализации. Если вы устанавливаете из какой-либо системы пакетов, то он сам поставится в “/etc/rc.d/” или “/usr/local/etc/rc.d/” для FreeBSD, а для Debian/Ubuntu в “/etc/init.d/”.
Еще в скриптах инициализации принято писать комментарии, например вот так для Debian. Но если честно я не пишу, это больше нужно когда в поставку входит скрипт инициализации, а для себя это не важно.
Что бы включить автозапуск в Red Hat надо: