thumb

Любому демону нужен скрипт управления для того, чтобы его запускать, останавливать и т.д. Но не всегда в комплекте есть этот самый скрипт инициализации. Я опишу несколько примеров создания таких скриптов и способы управления ими.

Я буду показывать на примере сервиса для синхронизации файлов btsync (BitTorrent Sync).

Управление автозагрузкой с помощью sysv-rc-conf

Для управления автозагрузкой я предпочитаю пользоваться программой sysv-rc-conf.

Устанавливаем sysv-rc-conf если ещё не установлена:

sudo apt-get install sysv-rc-conf

Запускаем sysv-rc-conf:

sudo sysv-rc-conf

Изменяем параметры на нужные:

btsync [][x][x][x][x][][][]

Находим в списке демон параметры автозагрузки которого необходимо изменить. Например btsync и отмечаем крестиками 2,3,4 и 5 уровни, что соответствует параметрам автозапуска по дефолту. Если нужно отключить автозагрузку демона, тогда убираем все крестики. Отмечаем нажимая пробел. Настройка автоматически применяется. Для выхода нажимаем q.

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

Создание скрипта инициализации (простой)

Создаём файл (service init script) /etc/init.d/btsync:

sudo nano /etc/init.d/btsync

со следующим содержимым:

#!/bin/sh
### BEGIN INIT INFO
# Provides:          btsync
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start btsync at boot time
# Description:       Enable BitTorrent Sync service.
### END INIT INFO

/usr/local/bin/btsync --config ~/.btsync.conf

Дадим права на исполнение:

sudo chmod +x /etc/init.d/btsync

Обновляем ссылки на сценарии инициализации стиля System-V:

sudo update-rc.d btsync defaults

А теперь протестируем:

sudo service btsync start

Примечание: Такой init-скрипт умеет только запускать демон, но не останавливать. Этот способ подходит для тех случаев когда необходимо быстро прописать демон в автозагрузку. В таком случае остановить демон можно с помощью killall <name>.

Создание скрипта инициализации (полноценный)

За основу берётся init-скрипт /etc/init.d/skeleton, по этому копируем его с новым именем соотвествующим имени демона, а точнее самого бинарника, а не его коммерческое название.

sudo cp /etc/init.d/skeleton /etc/init.d/btsync

Правим файл /etc/init.d/btsync:

sudo nano /etc/init.d/btsync

Нас интересует только эта часть скрипта:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          skeleton
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Example initscript
# Description:       This file should be used to construct scripts to be
#                    placed in /etc/init.d.
### END INIT INFO

# Author: Foo Bar <foobar@baz.org>
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.

# Do NOT "set -e"

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Description of the service"
NAME=daemonexecutablename
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS="--options args"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

В которой мы должны подправить строки исходя из моих комментариев:

# Provides:                    (Название демона)
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:                    (Уровни загрузки)
# Default-Stop:                    (Уровни остановки)
# Short-Description:                ( Описание того, что делает скрипт)
# Description:                    (Описание, что запускается)
# Author:                        (Ваше имя, фамилия и email)
PATH=/sbin:/usr/sbin:/bin:/usr/bin    (Пути поиска бинарника)
DESC="Description of the service"    (Описание сервиса)
NAME=daemonexecutablename    (Имя бинарника)
DAEMON=/usr/sbin/$NAME        (Путь до демона)
DAEMON_ARGS="--options args"    (Параметры для запуска демона)
PIDFILE=/var/run/$NAME.pid        (Путь до pid-файла)
SCRIPTNAME=/etc/init.d/$NAME    (Имя скрипта в /etc/init.d/)

Дадим права на исполнение:

sudo chmod +x /etc/init.d/btsync

Обновляем ссылки на сценарии инициализации стиля System-V:

sudo update-rc.d btsync defaults

А теперь протестируем:

sudo service btsync start

Примечание: В отличии от предыдущего скрипта этот имеет полную функциональность. Этот способ подходит для тех случаев когда необходим контроль над демоном. В таком случае управление демоном происходит с помощью service <name> (start/stop/status) или /etc/init.d/<name> (start/stop/status).

Если эта статья помогла вам, пожалуйста, оставьте комментарий :smiley:

Спасибо за прочтение!