Автозавантаження в Linux
Будь-якому демону потрібен сценарій керування для того, щоб його запускати, зупиняти і т.д. Але не завжди в комплекті є цей самий скрипт ініціалізації. Я опишу кілька прикладів створення таких скриптів і способи керування ними.
Я буду показувати на прикладі сервісу для синхронізації файлів 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).
Якщо ця стаття допомогла вам, будь ласка, залиште коментар ![]()
Дякую за прочитання!
Arthur is a designer and full stack software engineer. He is the founder of Space X-Chimp and the blog My Cyber Universe. His personal website can be found at arthurgareginyan.com.