LSB tags в Debian 6 для init скриптов
/etc/init.d
lsb_tags
init script
LSB tags в Debian 6 для init скриптовstrattumjuly 26th, 2012Трабл возник когда при установке пакетов начало писать такую ошибку на самопальные init-скрипты
Немного теории:
Автозапуск программы как демона
Обычно в системе уже есть много подсказок как это сделать, но всё-таки приходится лазить по разным файлам и искать в интеренете дополнительную информацию. Это не значит, что я опишу тут каждую букву, но искать придётся меньше, надеюсь.
Для начала стоит заглянуть в каталог /etc/init.d. Здесь содержатся запускные скрипты всех сервисов, а также два файла для желающих написать себе такой же:
README и skeleton
skeleton содержит в себе болванку скрипта запуска с довольно подробными комментариями, а README его неплохо дополняет, не смотря на его небольшой размер. Также можно посмотреть и другие файлы и попытаться найти там что-то, что прояснит непонятную ситуацию.
В 6-ом debian`е для запускных скриптов демонов используется LSB Linux Script Base Init Standart. Почитать о нём подробнее можно тут. Для систем, где LSB не используется стоит взглянуть сюда.
Рассмотрим поближе файл skeleton. Первое с чего он должен начинаться, конечно же “#!/bin/sh”, т.к. init-скрипт — запускной файл. Далее идёт комментированный заголовок:
### 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
Может показаться, что это просто лишняя информация от автора, но это не так. То, что указано здесь используется при прописывании скрипта в систему. Тут как раз пригодится файл README, который показывает, что в заголовке skeleton перечислены не все возможные параметры. Как минимум есть ещё следующие:
# Should-Start: $portmap# Should-Stop: $portmap# X-Start-Before: nis# X-Stop-After: nis# X-Interactive: true
Все параметры и их полное описание на английском можно увидеть тут, а на русском тут. К русскому варианту добавлю, что в Required-Start: можно прописать $all, тогда текущий скрипт будет запускаться после всех остальных иногда это бывает нужно. Также X-Interactive: true показывает, что этот скрипт может взаимодействовать с пользователем, запросом на ввод чего-нибудь, например пароля.
Далее в skeleton идёт инициализация переменных, используемых в самом скрипте. Часть из них нужно будет настроить под свои нужды. Потом проверки на то, что сам демон существует и попытка прочитать конфигурационный файл их имена должны быть указаны в переменных выше, далее загрузка переменных rcS, а потом идёт одна из самых интересных частей init-файла:
. /lib/lsb/init-functions
это определение LSB функций работы с логами, LSB-статусом сервиса, работы с процессом. В некоторых дистрибутивах этот файл может находиться в каталоге /etc/init.d. Названия и часть подробностей можно узнать непосредственно из комментариев к функциям в этом файле, а также тут.
Следующая часть — непосредственно тело скрипта. Тело состоит из условных частей, которые являются командами для демона: start, stop, restart/reload/force-reload, status. Кто-то выделяет их в отдельные функции, кто-то нет. На мой взгляд, функциями они выглядят эстетичнее и код более понятен. Все эти команды объединяет оператор выбора case, который и выбирает для исполнения нужный кусок кода, в зависимости от команды параметра с которой был запущен init-скрипт.
Таким образом для создания обычного скрипта достаточно подставить в переменные в начале файла нужные значения и, возможно, немного добавить кода в функции start/stop например загрузку/выгрузку драйвера.
После того как файл будет готов его нужно скопировать в /etc/init.d и добавить в автозагрузку:
update-rc.d \<имя_скрипта> defaults
или insserv \<имя\_скрипта\> для debian 6 stable и выше
Удалить из автозагрузки можно так:
update-rc.d -f \<имя_скрипта> remove
или insserv \-r \<имя\_скрипта\> для debian 6 stable и выше
Далее также можно использовать команды sysv-rc-conf в debian или service в fedora core, чтобы включить/выключить автозагрузку сервиса.
Что же нужно сделать:
1) Добавляем в начало init-скрипта можно после \#\!/bin/bash
### BEGIN INIT INFO# Provides: myscript# Required-Start:# Required-Stop:# Default-Start: 2 3 4 5# Default-Stop: 1 0 6# Short-Description: simple description.### END INIT INFO
2) затем в консоли пишем
3) Вот и все!lsb