Скрипты инициализации для 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>
Комментарии
Мишка, зачетная статья, спасибо.
Оставьте свой комментарий