Автозавантаження в 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.