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).