Список UNIX/LINUX демонов/служб и их автозагрузка 2 часть

Feb 16, 2013 21:42



2 часть начало тут
Автозагрузка демонов/служб UNIX/LINUX

Ниже даны подробные инструкции по управлению автозагрузкой демонов/служб в наиболее распространённых модификациях/версиях UNIX-подобных ОС таких как CentOS Linux, Debian Linux и ОС BSD типа. В остальных же модификациях/версиях UNIX-подобных ОС управление автозагрузкой демонов/служб имеет схожий порядок, хотя может иметь некие не существенные или же вовсе радикальные отличия!

Автозагрузка демонов/служб в CentOS Linux

В CentOS уровни загрузки определены по принципу System V и расписаны в файле /etc/inittab, читаем less /etc/inittab.

Каталоги для каждого из уровней загрузки носят названия rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d и расположены в директории /etc/rc.d.

В каждом из каталогов, который соответствует тому или иному уровню загрузки расположены шел скрипты, вернее ссылки на них, с инструкциями для запуска демона/программы/службы, а сами же шел скрипты с инструкциями для запуска демона/программы/службы расположены в каталоге /etc/rc.d/init.d

Пример скриптов управляющих запуском демона/программы/службы можно просмотреть выполнив less /etc/rc.d/init.d/mysqld или less /etc/rc.d/init.d/sshd. Обычно скрипты управляющие запуском демона/программы/службы появляются в /etc/rc.d/init.d/ и линкуются в каталоги уровней запуска после установки ПО, а их статус off/on для каждого из уровней запуска управляется утилитой chkconfig.

Какой из демонов будет запущен на различных уровнях запуска можно посмотреть командой chkconfig --list. Включить демон для автоматического запуска в какой-либо из уровней запуска можно командой chkconfig --level 345 mysqld on, а выключить chkconfig --level 345 mysqld off соответственно, chkconfig -del service_ name удалить службу, chkconfig service_name on|off включить или выключить службу на всех уровнях.

Что касается добавления скриптов в автозагрузку, то для автоматической загрузки скриптов служит /etc/rc.local, в /etc/rc.local достаточно добавить полный путь к скрипту, например: /root/scripts/script.sh или /bin/sh /root/scripts/script.sh. Если после установки ПО в /etc/rc.d/init.d/ нет скрипта управляющего автозапуском нужной программы, то строку её инициализации/запуска проще добавить в /etc/rc.local.

Для управления уровнями запуска существует утилита ntsysv, man ntsysv.

Автозагрузка демонов/служб в Debian Linux

Автозагрузка в Debian Linux построена немного иначе. Уровни загрузки по принципу System V определены и расписаны всё в том же файле /etc/inittab, читаем less /etc/inittab.

Каталоги для каждого из уровней загрузки в Debian Linux тоже носят названия rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, rc6.d но, расположены уже не в директории /etc/rc.d, а в корне каталога /etc

Шел скрипты с инструкциями для запуска демона/программы/службы, вернее символические ссылки на них расположены в каталогах /etc/rc?.d где знак ? соответствует уровню загрузки, а сами же шел скрипты с инструкциями для запуска демона/программы/службы расположены в каталоге /etc/init.d. Пример такого скипта, по образцу которого можно написать свой, можно найти в файле less /etc/init.d/skeleton.

Ниже дадим пояснения служебной информации используемой в заготовке скрипта /etc/init.d/skeleton:

### BEGIN INIT INFO
# {ключевое_слово}: арг1 [арг2...]
### END INIT INFO

  • Provides: Описывает предоставляемые этим скриптом объекты (арг1, агр2, ...) таким способом, что, когда скрипт запускается с аругментом start, данные объекты считаются существующими, и, следовательно, другие скрипты в init, которые требуют существование этих объектов, смогут запуститься на более поздней стадии. Обычно, можно использовать имя скрипта в качестве объекта, но так же можно использовать имя сервиса, которую он заменяет. Виртуальные объекты тут не указываются. Они определены вне скриптов init.d
  • Required-Start: Задаёт объекты, которые должны существовать, чтобы запустить скрипт. При необходимости можно использовать виртуальные объекты, как описано ниже. Если объекты не указывается, то скрипт может быть запущен сразу после старта, без необходимости подключения локальных файловых систем, запуска системного журнала и т.д.
  • Required-Stop: Задаёт используемые сервисом объекты, предоставляемые скриптом. Предоставляемый этим скриптом объект, должен завершиться до завершения перечисленных тут объектов, чтобы избежать конфликтов. Обычно, здесь указывают те же объекты, что и в Required-Start
  • Should-Start: Задаёт объекты, которые, если существуют, должны должны быть запущены перед сервисом, предоставляемым данным скриптом. Это допускает слабые зависимости, которые не приводят сервис к ошибке, если объекты не доступны. Можно использовать при необходимости виртуальные объекты, как описано ниже.
  • Should-Stop: Задаёт объекты, если существуют должны быть остановлены уже после данного сервиса. Обычно, здесь указывают те же объекты, что и в Should-Start
  • Default-Start: Задаёт уровни запуска, на которых скрипт должен быть запущен (остановлен) по умолчанию. Например, если сервис должен быть запущен на только уровнях 3, 4 и 5, укажите "Default-Start: 3 4 5" и "Default-Stop: 0 1 2 6".
  • Short-Description: Задаёт короткое описание действия скрипта. Ограничено одной строкой.
  • Description: Задаёт более подробное описание действия скрипта. Может быть в несколько строк, в этом случае, каждая строка описания должна начинаться с символа # с последующим знаком табуляции или как минимум 2-мя символами пробела. Описание заканчивается перед линией, не совпадающим с этим условием.
  • X-Start-Before, X-Stop-After: Задаёт обратные зависимости, которые значат то же, как если бы они были указаны в should-start и should-stop в пакетах, указанных тут.

Для отслеживания зависимостей важны ключевые слова provides, required- и should-. Остальные не используются. Уровни запуска используются программой по умолчанию для упорядочивания скриптов (например, insserv) для того, чтобы отслеживать, какой из каталогов rc?.d обновлять, когда служба добавляется в первый раз, и должны отражать назначение сервиса. Вот некоторые "виртуальные" объекты:

  • $local_fs - Все локальные фаловые системы подключены. Все скрипты, которые производят запись в /var/ должны зависеть от этого, если они уже не зависят от $remote_fs
  • $network - низкоуровневая сеть, т.е. сетевые карты, может подразумеваться PCMCIA запущеной
  • $named - Демоны, которые могут предоставлять разрешение доменных имён предполагаются запущенными. Например, DNS, NIS+ или LDAP
  • $portmap - Демоны, предоставляющие сервис SunRPC/ONCRPC portmapping как указано в 1833 (если они есть)
  • $remote_fs - Все файловые системы подключены. Скрипты, которые должны быть запущены во время остановки системы до того, как всем процессам будет отправлен сигнал уничтожения, должны зависеть от $remote_fs.
  • $syslog - системный журнал функционирует
  • $time - установленно корректное системное время, например, ntp или rdate, или RTC
  • $all - Запускает скрипт как можно последним

Управление автозагрузкой демонов в Debian Linux осуществляется при помощи утилиты update-rc.d, подробно в man update-rc.d. Утилита update-rc.d не создаёт и не удаляет ничего, кроме символических ссылок в /etc/rc?.d на так званые init скрипты управляющие запуском и остановкой демона/программы/службы, которые расположены в каталоге /etc/init.d.

Если скрипт для автозапуска демона/сервиса создан вручную по шаблону /etc/init.d/skeleton, то его нужно сначала разместить в каталоге /etc/init.d, потом создать символьную ссылку на этот скрипт в каталоге /etc/rc?.d, где ? - номер runlevel’а (уровень загрузки системы). Символическая ссылка должна иметь такой вид S№№имя_скрипта, где №№ - это номер очередности запуска, если требуется оставить символическую ссылку но, скрипт временно не запускать, то символическую ссылку следует модифицировать до такого состояния K№№имя_скрипта.

Перед началом обработки любого из уровней исполнения сначала выполняются все скрипты, которые начинаются с буквы 'K' (эти скрипты останавливают сервисы), а потом выполняются все скрипты, которые начинаются с буквы 'S' (эти скрипты запускают сервисы). Двузначное число после буквы 'S' или 'K' указывает на порядок, в котором будут выполняются скрипты. Скрипты с меньшим номером выполняются первыми, например: S01имя_скрипта стартует первым, а S09имя_скрипта будет запущен девятым.

Для создания символьной ссылки используется программа ln -s file1 file2, где ключ -s говорит о создании именно символьной ссылки, file1 указывает на существующий файл, а file2 имя новой ссылки но, вместо создания символических линков вручную, можно использовать утилиту update-rc.d, которая создана именно для создания символических ссылок в /etc/rc?.d на скрипты из /etc/init.d.

Синтаксис update-rc.d такой: добавление с параметрами по умолчанию update-rc.d defaults, удаление и остановка демона/сервиса update-rc.d -f remove && update-rc.d stop 20 2 3 4 5. Стартом и остановкой демонов/сервисов можно управлять через скрипт service name start|stop|restart.

Признаться update-rc.d является относительно мутной утилитой, более удобной является утилита chkconfig, которая в Debian Linux отсутствует по умолчанию. Для её установки нам нужно добавить дополнительные репозитории, желательно использовать только официальные репозитории пакетов Debian Linux, в конец списка vi /etc/apt/sources.list, пример sources.list в Debian GNU/Linux 6.0.5 _Squeeze_ - Official i386:

#

# deb cdrom:[Debian GNU/Linux 6.0.5 _Squeeze_ - Official i386 CD Binary-1 201205
12-13:45]/ squeeze main

deb cdrom:[Debian GNU/Linux 6.0.5 _Squeeze_ - Official i386 CD Binary-1 20120512
-13:45]/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

# squeeze-updates, previously known as 'volatile'
# A network mirror was not selected during install. The following entries
# are provided as examples, but you should amend them as appropriate
# for your mirror of choice.
#
# deb http://ftp.debian.org/debian/ squeeze-updates main
# deb-src http://ftp.debian.org/debian/ squeeze-updates main

deb http://backports.debian.org/debian-backports squeeze-backports main
deb http://ftp.debian.org/debian/ squeeze main
#deb http://repo.yandex.ru/debian squeeze main contrib
#deb http://mirror.yandex.ru/debian squeeze main contrib
#deb http://mirror.yandex.ru/debian-multimedia/ squeeze main contrib

После чего обновить список пакетов apt-get update и выполнить установку chkconfig apt-get install chkconfig, а также как альтернативу дополнительно можно поставить sysv-rc-conf apt-get install sysv-rc-conf. Как пользоваться утилитой chkconfig было упомянуто выше, дополнительно смотрим man sysv-rc-conf и man chkconfig.

Добавляя репозитории Debian Linux следует помнить о политике программного обеспечения применяемой к каждой из областей таких как main, contrib и non-free:

  • main: - пакеты из этой области являются частью полного дистрибутива Debian Linux и ни один из пакетов из области main для полноценного функционирования не требуют программного обеспечения из-за пределов этой области. Любой может свободно использовать, обмениваться, изменять и распространять пакеты из области main.
  • contrib: - пакеты из этой области могут свободно распространяться, однако некоторые их зависимости могут быть не свободны.
  • non-free: - содержит пакеты, которые не могут распространяться бесплатно согласно DSFG, а также пакеты из области могут содержать такие ошибки которые не учитываются при разработке и обновлении Debian Linux.

Для автозапуска прочих скриптов и программ в Debian Linux можно использовать старый-добрый /etc/rc.local.

Автозагрузка демонов/служб в ОС BSD типа

команды, linux, config, bash, безопасность, dpkg, консоль

Previous post Next post
Up