Управление процессами и службами запуска системы (SysVinit, Systemd и Upstart) -- LFCS часть 7

Управление процессами и службами запуска системы (SysVinit, Systemd и Upstart) — LFCS часть 7

LFCS

Сегодня поговорим про управление процессами и службами запуска системы SysVinit, Systemd и Upstart. Пару месяцев назад Linux Foundation запустила сертификацию LFCS (Linux Foundation Certified Sysadmin), чтобы помочь людям со всего мира проверить, могут ли они выполнять базовые задачи для промежуточного администрирования системы в системах Linux: поддержка системы, устранение неполадок и техническое обслуживание.

Эта статья является 7 частью из серии 20 статей, в этой части, мы объясним, как управлять процессами и службами запуска системы Linux, которые необходимы для экзамена по сертификации LFCS.

 

 

Управление процессом запуска Linux

Начнем с азов управление процессами и службами запуска системы. Процесс загрузки системы Linux состоит из нескольких этапов, каждый из которых представлен другим компонентом. Следующая диаграмма кратко суммирует процесс загрузки и показывает все основные компоненты.

Управление процессами и службами запуска системы (SysVinit, Systemd и Upstart) -- LFCS часть 7

 

Когда вы включаете ваш ПК, прошивка, которая хранится в чипе EEPROM на материнской плате, инициализирует POST (самотестирование при включении питания), чтобы проверить состояние аппаратных ресурсов системы. Когда POST завершено, прошивка выполняет поиск и инициализацию загрузчика 1-го этапа, расположенного в MBR или в разделе EFI первого доступного диска, и передает ему контроль.

 

 

Метод MBR

MBR находится в первом секторе диска, помеченного как загрузочный в настройках BIOS, и имеет размер 512 байт.

  • Первые 446 байт: загрузчик содержит как исполняемый код, так и текст сообщения об ошибке.
  • Следующие 64 байта: таблица разделов содержит запись для каждого из четырех разделов (первичных или расширенных). Среди прочего, каждая запись указывает статус (активный/неактивный), размер и начальные/конечные сектора каждого раздела.
  • Последние 2 байта: «магический номер», служит проверкой работы MBR.

 

Следующая команда выполняет резервное копирование MBR (в этом примере /dev/sda является первым жестким диском). Получающийся файл mbr.bkp может пригодиться, если таблица разделов по какой-то причине будет повреждена, что приведет к тому, что система станет недоступной.

Конечно, чтобы при необходимости использовать резервную копию, нам нужно будет её сохранить в другом месте (например, USB-накопитель). Этот файл поможет нам восстановить MBR и вернет все утерянные конфигурации, пока и только пока мы не изменим формат жесткого диска.

 

 

Резервная копия MBR

# dd if=/dev/sda of=mbr.bkp bs=512 count=1

 

Backup-MBR-in-Linux

 

 

Восстановление MBR

# dd if=mbr.bkp of=/dev/sda bs=512 count=1

 

Управление процессами и службами запуска системы (SysVinit, Systemd и Upstart) -- LFCS часть 7

 

 

Метод EFI/UEFI

Теперь погорим про еще один аспект управление процессами и службами запуска системы. Для систем, использующих метод EFI/UEFI, прошивка UEFI считывает настройки, чтобы определить, какое приложение UEFI должно быть запущено и откуда (т.е. на диске и разделе EFI).

Затем загружается загрузчик 2-го этапа (boot manager). GRUB [GRand Unified Boot] — наиболее часто используемый менеджер загрузок в Linux. В большинстве систем, используемых сегодня, можно найти одну из двух различных версий этого загрузчика.

  • Устаревший файл конфигурации GRUB: /boot/grub/menu.lst (обычно эти файлы существуют в старых дистрибутивах, не поддерживаемых прошивкой EFI/UEFI).
  • Файл конфигурации GRUB2: скорее всего, /etc/default/grub.

 

Цели экзамена LFCS не запрашивают знания о внутренних компонентах GRUB. Но если вы храбры и можете позволить себе «испортить» свою систему (вы можете попробовать сначала на виртуальной машине, на всякий случай), вам нужно запустить.

# update-grub

 

Это необходимо выполнить как пользователь root после изменения конфигурации GRUB, чтобы применить изменения.

В основном, GRUB загружает ядро ​​по умолчанию и образ initrd или initramfs. В нескольких словах initrd или initramfs помогают выполнить обнаружение оборудования, загрузку модуля ядра и обнаружение устройства, необходимых для установки реальной корневой файловой системы.

После того, как загрузка реальной корневой файловой системы завершена, ядро ​​запускает диспетчер системы и службы (init или systemd, идентификация процесса или PID всегда 1).

Как init, так и systemd — это демоны (фоновые процессы — службы), которые управляют другими демонами, поскольку первая служба запускается (во время загрузки) и последняя служба заканчивается (во время выключения).

 

Systemd-and-Init

 

 

Запуск служб (SysVinit)

Концепция уровней запуска в Linux определяет различные способы использования системы, контролируя, какие службы запущены. Другими словами, уровень выполнения контролирует, какие задачи могут быть выполнены в текущем состоянии выполнения (а какие не могут).

Традиционно этот процесс запуска выполнялся на основе соглашений, которые возникли с помощью System V UNIX, при передаче системы выполняются сценарии, которые запускают и останавливают службы, когда машина вводит определенный уровень выполнения.

В пределах каждого уровня выполнения отдельные службы могут быть настроены на запуск или завершение работы при запуске. Последние версии некоторых основных дистрибутивов отходят от стандарта System V в пользу довольно нового сервисного и системного менеджера под названием systemd (который представляет собой системный демон), но обычно поддерживают команды sysv для целей совместимости. Это означает, что вы можете запускать большинство известных инструментов sysv init в дистрибутиве systemd.

Помимо запуска системного процесса, init ищет файл /etc/inittab, чтобы решить, какой уровень запуска должен быть выполнен.

Уровень выполнения Описание
0  Остановка системы. Уровень запуска 0 — это особое переходное состояние, используемое для быстрого выключения системы.
1 Обычно инициализируется с помощью s или S. Иногда этот уровень называется режимом обслуживания. Услуги, если таковые имеются, запускаются на этом уровне выполнения, варьируются в зависимости от распределения. Обычно — это низкоуровневый уровень обслуживания системы.
2 Многопользовательский. В системах Debian это уровень запуска по умолчанию, он включает в себя -if . В системах на базе Red Hat существует многопользовательский режим без подключения к сети.
3  В системах на основе Red Hat существует многопользовательский режим по умолчанию, который запускает все, кроме графической среды. Этот уровень запуска и уровни 4 и 5 обычно не используются в системах на базе Debian.
4 Обычно неиспользуемый по умолчанию и поэтому доступен для настройки.
5 В системах на основе Red Hat есть полный многопользовательский режим с входом в GUI. Этот уровень запуска похож на 3 уровень, но с доступным графическим интерфейсом.
6 Перезагрузка системы.

 

Чтобы переключаться между уровнями выполнения, мы можем просто произвести изменение уровня запуска с помощью команды init: init N (где N — один из номеров уровней выполнения, перечисленных выше). Обратите внимание, что не рекомендуется использовать текущую систему для другого уровня выполнения, поскольку такая процедура не выдает никаких предупреждений существующим зарегистрированным пользователям (что приводит к тому, что они теряют выполняемую работу и все запущенные процессы).

Вместо этого команда shutdown должна использоваться для перезапуска системы (она сначала отправляет предупреждающее сообщение всем зарегистрированным пользователям, а затем сигнализирует init о необходимости переключить уровни выполнения). Однако начальный уровень по умолчанию (тот, который будет загружаться системой) должен быть сначала отредактирован в файле /etc/inittab.

По этой причине выполните следующие шаги, чтобы правильно переключаться между уровнями выполнения. Войдите как пользователь root и найдите следующую строку в /etc/inittab.

id:2:initdefault:

 

И измените номер 2 на требуемый уровень запуска с помощью любого текстового редактора, к примеру — vim (его использование описано в «Как использовать редактор vi / vim в Linux» — часть 2 этой серии).

Затем выполните команду как root.

# shutdown -r now

 

Последняя команда перезапустит систему, запустив ее в указанном уровне запуска во время следующей загрузки и запустив скрипты, расположенные в каталоге /etc/rc[runlevel].d (в нем указано какие службы должны быть запущены). Например, для 2 уровня запуска это будет:

Управление процессами и службами запуска системы (SysVinit, Systemd и Upstart) -- LFCS часть 7

 

 

Управление службами с помощью chkconfig

Чтобы включить или отключить системные службы при загрузке, мы будем использовать команду chkconfig в CentOS/openSUSE и sysv-rc-conf в Debian и её производных.

Отображение конфигурации уровня запуска для служб.

# chkconfig --list [service name]
# chkconfig --list postfix
# chkconfig --list mysqld

 

Listing-Runlevel-Configuration

 

На приведенном выше изображении мы видим, что postfix устанавливается, когда система входит в уровни выполнения со 2 по 5, тогда как mysqld будет выполняться по умолчанию для уровней выполнения со 2 по 4. Теперь попробуем поменять эти параметры.

Например, нам нужно включить mysqld для уровня запуска 5, а также отключить postfix для уровней выполнения 4 и 5. Вот что мы будем делать (запустите следующие команды как root).

 

Включение службы для определенного уровня запуска
# chkconfig --level [level(s)] service on
# chkconfig --level 5 mysqld on

 

Отключение службы для определенных уровней выполнения
# chkconfig --level [level(s)] service off
# chkconfig --level 45 postfix off

 

Управление процессами и службами запуска системы (SysVinit, Systemd и Upstart) -- LFCS часть 7

 

Теперь мы будем выполнять аналогичные задачи в системе на основе Debian, используя sysv-rc-conf.

 

 

Управление службами с помощью sysv-rc-conf

На этом этапе мы обсудим настройку служб для их автоматического запуска исключительно на определенном уровне запуска.

1. Давайте используем следующую команду, чтобы узнать, каковы уровни выполнения, на которых mdadm настроен для запуска.

# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

 

Check-Runlevel-of-Service-Running

 

2. Мы будем использовать sysv-rc-conf, чтобы предотвратить запуск mdadm на всех уровнях выполнения, кроме 2. Просто установите или снимите флажок (с помощью пробела), по желанию вы можете перемещать вверх, вниз, влево и вправо с помощью клавиш со стрелками.

# sysv-rc-conf

 

SysV-Runlevel-Config

 

Затем нажмите q, чтобы выйти.

3. Мы перезапустим систему и снова запустим команду из первого шага.

# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

 

Управление процессами и службами запуска системы (SysVinit, Systemd и Upstart) -- LFCS часть 7

 

В приведенном выше изображении мы видим, что mdadm настроен на запуск только на 2 уровне выполнения.

 

 

Что такое systemd?

Systemd — системный менеджер, демон инициализации других демонов в Linux, пришедший на замену используемого ранее SysV. Он нацелен на то, чтобы работа над процессом была выполнена параллельно с запуском системы (в отличие от sysvinit, которая имеет тенденцию работать медленнее, поскольку она запускает процессы по одному, проверяет их зависимости, и ждет, пока демоны будут запущены) и на динамическое управление ресурсами в запущенной системе.

Таким образом, службы запускаются, когда это необходимо (чтобы избежать использования ресурсов системы) вместо запуска непосредственно во время загрузки.

Для просмотра состояния всех процессов, запущенных в вашей системе, как системных, так и SysV-сервисов, выполните следующую команду. Это упростит управление процессами и службами запуска системы.

# systemctl

 

Check-All-Running-Processes

 

Столбец LOAD показывает, правильно ли загрузилось определение устройства (в systemd смотрите на столбец UNIT), в то время как столбцы ACTIVE и SUB отображают текущий статус такого устройства.

Отображение информации о текущем статусе службы

Столбец ACTIVE указывает, что статус устройства не активен, мы можем проверить, что произошло с ним.

# systemctl status [unit]

 

На изображении выше, media-samba.mount находится в состоянии отказа. Давайте разберемся.

# systemctl status media-samba.mount

 

Управление процессами и службами запуска системы (SysVinit, Systemd и Upstart) -- LFCS часть 7

 

Мы видим, что media-samba.mount не удалось запустить, потому что процесс монтирования на главном dev1 не смог найти сетевой ресурс в //192.168.0.10/gacanepa.

Запуск или остановка сервисов

Как только сетевой ресурс //192.168.0.10/gacanepa станет доступным, попробуем запустить, остановить и перезапустить единицу media-samba.mount. После выполнения каждого действия, будем запускать systemctl status media-samba.mount, чтобы проверить его статус.

# systemctl start media-samba.mount
# systemctl status media-samba.mount
# systemctl stop media-samba.mount
# systemctl restart media-samba.mount
# systemctl status media-samba.mount

 

Starting-Stoping-Services

 

Включение или отключение службы для запуска во время загрузки

Теперь расскажем про управление процессами и службами запуска системы. В systemd вы можете включить или отключить службу при ее загрузке.

# systemctl enable [service]                    # enable a service
# systemctl disable [service]                             # prevent a service from starting at boot

 

Процесс включения или отключения службы для автоматического запуска при загрузке заключается в добавлении или удалении символических ссылок в каталоге /etc/systemd/system/multi-user.target.wants.

 

Enabling-Disabling-Services

 

Кроме того, вы можете узнать текущее состояние службы (включена или отключена) с помощью команды.

# systemctl is-enabled [service]

 

Например,

# systemctl is-enabled postfix.service

 

Кроме того, вы можете перезагрузить или выключить систему.

# systemctl reboot
# systemctl shutdown

 

 

Upstart

Upstart — система инициализации ОС, которая управляет запуском демонов в течение загрузки системы, их остановку, а также управляет ими во время работы системы. Она поможет в управление процессами и службами запуска системы.

Она был первоначально разработана для дистрибутива Ubuntu, но используется в Red Hat Enterprise Linux 6.0. Хотя была предназначен для работы во всех дистрибутивах Linux в качестве замены для sysvinit, со временем её заменила systemd. 14 февраля 2014 года Марк Шаттлворт (основатель Canonical Ltd.) объявил, что будущие выпуски Ubuntu будут использовать systemd в качестве демона init по умолчанию.

Поскольку сценарий запуска SysV для системы был очень распространен так долго, большое количество программных пакетов поддерживает сценарии запуска SysV. Для работы с такими пакетами Upstart предоставляет режим совместимости: он запускает сценарии запуска SysV в обычных местоположениях (/etc/rc.d/rc?.d, /etc/init.d/rc?.d, /etc/rc?.d и т.д.). Таким образом, если мы установим пакет, который еще не содержит сценарий конфигурации Upstart, он все равно запустится обычным способом.

Кроме того, если мы установили такие утилиты, как chkconfig, мы можем использовать их для управления службами на основе SysV так же, как и в системах на основе sysvinit.

Скрипты Upstart также поддерживают запуск или остановку служб на основе более широкого круга действий, чем скрипты запуска SysV. Например, Upstart может запускать службу всякий раз, когда подключается конкретное аппаратное устройство.

Система, использующая Upstart и ее собственные сценарии, заменяет файл /etc/inittab и файлы сценариев запуска SysV для сценариев запуска с скриптами .conf в каталоге /etc/init.

Эти *.conf-скрипты (также называемые определениями заданий) обычно состоят из следующего:

  • Описание процесса.
  • Уровни выполнения, на которых должен выполняться процесс, или события, которые должны запускать его.
  • Уровни выполнения, на которых процесс должен быть остановлен, или события, которые должны его остановить.
  • Опции.
  • Команда для запуска процесса.

 

Например,

# My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null <[email protected]>"
# Stanzas
#
# Stanzas define when and how a process is started and stopped
# See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
# When to start the service
start on runlevel [2345]
# When to stop the service
stop on runlevel [016]
# Automatically restart process in case of crash
respawn
# Specify working directory
chdir /home/dave/myfiles
# Specify the process/command (add arguments if needed) to run
exec bash backup.sh arg1 arg2

 

Чтобы применить внесенные изменения, вам нужно будет указать Upstart, что необходимо перезагрузить её конфигурацию.

# initctl reload-configuration

 

Затем проведите запуск, введя следующую команду.

$ sudo start yourjobname

 

Где yourjobname — это имя задания, которое было добавлено ранее с помощью скрипта yourjobname.conf.

Более полное и подробное справочное руководство для Upstart доступно на веб-сайте проекта «Cookbook».

 

 

Итог

Знание процесса загрузки Linux необходимо для решения задач устранения неполадок, а также для адаптации производительности и работы компьютера к вашим потребностям.

В этой статье мы проанализировали, что происходит с момента нажатия на кнопку питания, и аж до получения полностью работоспособного пользовательского интерфейса. Теперь вы знаете все необходимое про управление процессами и службами запуска системы.

 

 

Спасибо за уделенное время на прочтение статьи!

Если возникли вопросы, задавайте их в комментариях.

Подписывайтесь на обновления нашего блога и оставайтесь в курсе новостей мира инфокоммуникаций!

Чтобы знать больше и выделяться знаниями среди толпы IT-шников, записывайтесь на курсы Cisco от Академии Ciscoкурсы Linux от Linux Professional Institute на платформе SEDICOMM University.

Курсы Cisco и Linux с трудоустройством!

Спешите подать заявку! Осталось пару мест. Группы стартуют 22 июля, а следующая 19 августа, 23 сентября, 21 октября, 25 ноября, 16 декабря, 20 января, 24 февраля.
Что Вы получите?
  • Поможем стать экспертом в сетевом администрировании и получить международные сертификаты Cisco CCNA Routing & Switching или Linux LPI.
  • Предлагаем проверенную программу и учебник экспертов из Cisco Networking Academy и Linux Professional Institute, сертифицированных инструкторов и личного куратора.
  • Поможем с трудоустройством и сделать карьеру. 100% наших выпускников трудоустраиваются.
Как проходит обучение?
  • Проводим вечерние онлайн-лекции на нашей платформе или обучайтесь очно на базе Киевского офиса.
  • Спросим у вас об удобном времени для практик и подстроимся: понимаем, что времени учиться мало.
  • Если хотите индивидуальный график — обсудим и осуществим.
  • Выставим четкие дедлайны для самоорганизации. Личный куратор будет на связи, чтобы ответить на вопросы, проконсультировать и мотивировать придерживаться сроков сдачи экзаменов.
А еще поможем Вам:
  • отредактировать резюме;
  • подготовиться к техническим интервью;
  • подготовиться к конкурсу на понравившуюся вакансию;
  • устроим на работу в Cisco по программе Cisco Incubator, New Graduate и Experienced. Наши студенты, которые уже работают там: жмите на #НашиВCisco Вконтакте, #НашиВCisco Facebook.
Чтобы учиться на курсах Cisco CCNA Routing & Switching и Linux LPI, подайте заявку или получите бесплатную консультацию.
LFCS

Больше похожих постов

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Самое читаемое
Меню