Блог ИТ склеротика. Введение в службы, уровни запуска и rc-сценарии

Страницы

Расширенный поиск в статьях блога

28 февраля 2012 г.

Введение в службы, уровни запуска и rc-сценарии


В Linux службами называют приложение или набор приложений, которые запускаются и выполняют свою работу в фоновом режиме. С некоторыми вы можете быть знакомы, например такими, как Apache или MySQL, в то время как о других вы можете вообще не догадываться, хотя они и выполняют важные задачи в вашей системе. Как же узнать, какие службы работают в вашей системе и, что более важно, как самостоятельно настраивать работу собственных?



System V vs. BSD

В этой статье я рассматриваю так называемый System V стиль запуска системы и дистрибутивы, использующие этот стиль, поскольку в Linux он наиболее распространён. Другим популярным стилем запуска является BSD (Berkeley Software Distribution). В чём же между ними разница? Если совсем кратко, то в BSD отсутствуют уровни запуска системы и System V к этом смысле является более гибкой, предоставляя администратору больше возможностей по организации процесса загрузки системы.
Львиная дола дистрибутивов Linux хранят сценарии инициализации (rc-сценарии) в каталогах /etc/rc1.d/etc/rc2.d и т. д., в то время как BSD-системы размещают rc-сценарии в каталоге /etc/rc.d. Процесс загрузки Slackware похож на BSD, хотя в Slackware есть уровни запуска и она является System V-совместимой, начиная с версии 7.

Загрузка системы

Когда вы включаете компьютер, одним из первых запускается загрузчик, обычно это LILOили GRUB. Далее, загрузчик загружает ядро операционной системы. После этого ядро запускает процесс init, который, в свою очередь, считывает файл /etc/inittab, чтобы определить уровень запуска системы по умолчанию. Этот уровень и определяет дальнейшую конфигурацию загрузки вашей системы. После того, как демон init определяет уровень запуска, он ищет файлы сценариев, определённые для данного уровня, затем выполняет их.
Давайте взглянем на то, как система запускается и рассмотрим поближе содержимое каталога /etc/rc.d. В этом каталоге вы найдёте файлы с именами rc.0, rc.1, rc.2, rc.3, rc.4, rc.5, и rc.6, или же набор каталогов с именами rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, и rc6.d. Также, вы должны найти файл /etc/inittab. Всё перечисленное система использует на стадии загрузки для запуска служб.
Если вы посмотрите внутрь файла /etc/inittab, вы обнаружите в нём примерно следующее:
id:4:initdefault:1
0:0:wait:/etc/rc.d/rc.01
6:6:wait:/etc/rc.d/rc.6x
1:4:wait:/etc/rc.d/rc.4
В процессе загрузки система использует эту информацию для того, чтобы определить уровень загрузки по-умолчанию, а также перечень файлов, используемых этим уровнем. В приведённом примере уровнем загрузки по-умолчанию назначен 4-й, а файлы, участвующие в нём, расположены в каталоге /etc/rc.d/rc.4
Что же такое уровень запуска? Вы можете подумать, речь идёт о каких-то уровнях, через которые система проходит в процессе загрузки. Это не совсем так. Представляйте себе уровень запуска, как некую точку, в которую входит система, загружаясь. Уровень запуска с номером 1, как правило, определяет наиболее простую однопользовательскую конфигурацию системы без графической оболочки и поддержки сети. А, например, уровень 5 загружает систему в многопользовательском режиме, с графической оболочкой и сетевой поддержкой. Уровни 0 и 6 используются при останове или перезагрузке системы соответственно.
Однако, существуют определённые отличия в разных дистрибутивах. Например, Fedora на 5-м уровне запускает графический логин-менеджер, в то время как Slackware делает это на 4-м. Так что, проконсультируйтесь с документацией к используемому дистрибутиву, прежде чем будете вносить какие-либо изменения. Приведённая ниже таблица отображает «традиционное» использование уровней запуска, а также использование их в некоторых популярных дистрибутивах. Взято из книги «Linux — The Complete Reference» (R.Peterson, Osbourne/McGraw-Hill).
Уровень«Традиция»SlackwareDebian
0ВыключениеВыключениеВыключение
1Однопользовательский режимОднопользовательский режимОднопользовательский режим
2Базовый многопользовательский режим без поддержки сетиТакой же, как уровень 3Многопользовательский режим
3Полный (текстовый) многопользовательский режимМногопользовательский режимМногопользовательский режим
4Не используетсяМногопользовательский режим с X11 + XDM/GDM/KDMМногопользовательский режим
5Полный (графический) многопользовательский режимТакой же, как уровень 3Многопользовательский режим
6ПерезагрузкаПерезагрузкаПерезагрузка
Как вы видите, различия в разных дистрибутивах хоть и небольшие, но существенные. Одно в них одинаково: если вы хотите изменить уровень запуска системы, вы должны  иметь права root, чтобы отредактировать файл /etc/inittab.
Зачем вам может понадобиться изменить уровень запуска? В повседневной работе обычно используют многопользовательский  текстовый или графический режим. Но в некоторых случаях, когда возникают какие-то неполадки в системе, нужен однопользовательский режим, в котором бы не запускались автоматически какие-то службы, вероятно вызывающие проблемы. Уровни 0 и 6 никогда не должны использоваться в качестве уровней по умолчанию, ведь вам не нужно, чтобы система была постоянно выключена или находилась в состоянии перезагрузки?
Изменить уровень запуска вы можете в том числе и при запущенной системе при помощи команды:
init <уровень>
На основе номера уровня запуска программа init принимает решение, какой набор сценариев из каталога /etc/rc.d ей выполнять. Например, если уровень запуска равен 4, то будет запущен скрипт /etc/rc.d/rc.4 или же все скрипты из каталога /etc/rc.d/rc4.d. Давайте взглянем на пример rc.d-сценария. Ниже приведён сценарий rc4.d из Slackware 10.2.
# Try to use GNOME's gdm session manager:
if [ -x /usr/bin/gdm ];
then  exec /usr/bin/gdm -nodaemonfi
 
# Not there?  OK, try to use KDE's KDM session manager:
if [ -x /opt/kde/bin/kdm ];
then  exec /opt/kde/bin/kdm -nodaemonfi
 
# If all you have is XDM, I guess it will have to do:
if [ -x /usr/X11R6/bin/xdm ];
then  exec /usr/X11R6/bin/xdm -nodaemonfi
Как вы и могли ожидать, команды этого сценария обеспечивают перевод системы в графический режим, запуская графический менеджер сессий.
В других дистрибутивах, таких как RedHat или Debain, вы обнаружите, что что rc-сценарии являются символическими ссылками на файлы в каталоге /etc/init.d — общее хранилище всех rc-сценариев. Так что, если вы создадите свой собственный rc-скрипт, разместите его в /etc/init.d, а затем сделайте на него символическую ссылку из каталога нужного уровня запуска (или из файла сценария уровня запуска, в зависимости от того, какой механизм используется в вашей системе).
Например, в Debian уровнем запуска по умолчанию является второй. Если в вашей системе работает Apache 2, то вы можете найти его rc-сценарий в файле /etc/init.d/apache2 и символическую ссылку с именем S91apache2 на этот файл из каталога /etc/rc2.d. Наличие этой ссылки обеспечивает запуск Apache 2 на втором уровне запуска системы, но только после тех сервисов, номера в именах файлов символических ссылок которых меньше 91-го.
Когда система выключается или перезагружается, используются символические ссылки из каталогов /etc/rc0.d и /etc/rc6.d соответственно. Однако имена этих ссылок начинаются с буквы «K», а не «S», что сообщает rc-сценариям о необходимости завершить работу процессов.
Если всё сказанное звучит для вас слишком сложно, вы можете использовать файл /etc/rc.d/rc.local для собственных нужд. Этот скрипт запускается после всех rc-сценариев, но до появления приглашения входа в систему. По умолчанию он выглядит примерно так:
#!/bin/bash
## /etc/rc.local - run once at boot time
# Put any local setup commands in here:
Вы можете дополнить этот скрипт  вызовами нужных вам сценариев. Например:
/root/bin/start_bb
Или же добавить запуск программ:
modprobe -r uhci
modprobe usb-uhci
iptables -F
iptables -A INPUT -i ppp0 -p tcp --syb -j DROP
netdate time.nist.gov
apachectl start
Однако имейте ввиду, что в некоторых дистрибутивах, таких как Debian и основанных на нём, не стоит использовать сценарий /etc/rc.d/rc.local. Обратитесь к Debian FAQ, если у вас возникла необходимость в настройке собственного сценария, выполняющегося при загрузке системы.
И напоследок. Если вы добавляете в систему сценарий запуска чего-либо , то не забывайте и о сценарии останова этого при помощи скриптов в каталогах /etc/rc0.d и /etc/rc6.d. Таким образом вы сможете гарантировать то, что ваши запущенные сервисы будут корректно остановлены и не создадут неопределённого состояния, могущего помешать их запуску при следующем старте системы.
Также имейте ввиду, что некоторые дистрибутивы имеют специальные средства для обслуживания сценариев запуска. Например, в RedHat и Fedora используется программаchkconfig, в Debian — update-rc.d.
Я надеюсь, что этот краткий обзор помог вам понять, как работают rc-сценарии и как при помощи них управлять службами, работающими в вашей системе. Теперь, в случае необходимости, вы можете создавать собственные rc-скрипты, а также находить и отключать ненужные вам, чтобы ускорить запуск системы и снизить её загрузку.
По мотивам Linux.Com

.

Счетчик тИЦ и PR Яндекс.Метрика Msn bot last visit powered by MyPagerank.NetYahoo bot last visit powered by MyPagerank.Net ping fast  my blog, website, or RSS feed for Free