- Загрузка системы #
- Загрузчик ОС #
- Загрузка ОС #
- Задачи системы инициализации #
- Стадии загрузки ОС #
- Варианты реализации стадий #
- Службы #
- Настройка systemd #
- Каталоги конфигурации systemd #
- Управление службами systemd #
- Управление состоянием системы #
- Указание зависимостей #
- Список служб Linux с помощью Systemctl
- Список служб Linux
- Отображение статуса службы
- Выводы
Загрузка системы #
flowchart TB power(«Подача питания») bios[«Загрузка микрокода материнской платы»] hw_init[«Инициализация ключевых компонентов»] loader_search[«Поиск загрузчика»] loader_init[«Передача управления загрузчику»] os_init[«Загрузка ядра ОС»] power —> bios bios —> hw_init —> loader_search —> loader_init —> os_init
Существует несколько стандартов для реализации систем загрузки
- BIOS, Basic Input Output System
- UEFI, Unified Extensible Firmware Interface
- EFI, Extensible Firmware Interface
- Множество закрытых решений
Загрузчик ОС #
Задачей загрузчика ОС является поиск ядра ОС с дальнейшей передачей ядру управления. Загрузчик может иметь интерактивный интерфейс для выбора вариантов ОС для загрузки
В GNU/Linux для загрузки ОС применяется связка из
- ядра ОС, являющегося бинарным исполняемым файлом
- initrd, Initial RAM Disk, образа временной файловой системы, необходимой ядру для дальнейшей загрузки системы
В рамках initrd поставляются:
- Модули ядра ОС, необходимые для работы с оборудованием на данном компьютере
- Служебные приложения, нужные для загрузки модулей и настройки системы
Загрузка ОС #
В рамках загрузки ядра ОС происходит поиск всего оборудования и его инициализация
После того как всё оборудование готово к работе, ядро запускает процесс-инициализации init
Существует множество систем инициализации:
Сравнение разных систем предоставляет проект Gentoo
Задачи системы инициализации #
Система инициализации может также выполнять действия других системных служб
- Подключение файловых систем (обычно да)
- Настройка сетевых интерфейсов (обычно нет)
- Запуск задач по расписанию (обычно нет)
- Журналирование работы служб (обычно нет)
- Управление входом пользователей в систему (обычно нет)
- Создание виртуальных файлов для устройств (обычно нет)
- Управление временем системы (обычно нет)
Стадии загрузки ОС #
При запуске системы обычно рассматриваются следующие стадии
- Настройка ключевых служб, поддержка работы сессии суперпользователя
- Поддержка работы множества пользователе
- Поддержка работы с графическим пользовательским интерфейсом
Также система инициализации должна выполнять корректное выключение системы, т.е. выключать службы в правильном порядке
Варианты реализации стадий #
SysV Runlevel | systemd Target | Notes |
---|---|---|
0 | poweroff.target, runlevel0.target | Halt the system. |
1, s, single | rescue.target, runlevel1.target | Single user mode. |
2, 4 | multi-user.target, runlevel2.target, runlevel4.target | User-defined/Site-specific runlevels. By default, identical to 3. |
3 | multi-user.target, runlevel3.target | Multi-user, non-graphical. Users can usually login via multiple consoles or via the network. |
5 | graphical.target, runlevel5.target | Multi-user, graphical. Usually has all the services of runlevel 3 plus a graphical login. |
6 | reboot.target, runlevel6.target | Reboot |
emergency | emergency.target | Emergency shell |
Службы #
Служба обычно представляет собой некоторое приложение, которое постоянно запущено и которое предоставляет полезные услуги пользователю или другим приложениям
- Приложение реагирует на некоторые сигналы и выполняет некоторые действия
- Сигнал от ядра ОС о добавлении нового устройства
- Сигнал по шине взаимодействия, запрос на выполнение операции
- Сигнал по сетевому интерфейсу, выполнение действия
- Файловая система с файлами службы уже доступна на момент запуска службы
- Сетевой интерфейс уже настроен и готов обрабатывать запросы
- Служба базы данных запущена и готова обрабатывать запросы
Службы также могут представлять собой действия, выполняющиеся с некоторой регулярностью
Настройка systemd #
Для описания всех компонентов systemd используются файлы модулей (unit), в которых описывается поведение конкретного компонента. В настоящий момент systemd поддерживает следующие виды модулей:
Тип модуля Описание Target A group of units that defines a synchronization point. The synchronization point is used at boot time to start the system in a particular state. Service A unit of this type starts, stops, restarts or reloads a service daemon such as Apache webserver. Timer A unit of this type activates/deactivates specified service based on a timer or when the set time is elapsed. Socket A unit of this type activates a service when the service receives incoming traffic on a listening socket. Device A unit of this type implements device-based activation such as a device driver. Тип модуля Описание Mount A unit of this type controls the file-system mount point. Automount A unit of this type provides and controls on-demand mounting of file systems. Swap A unit of this type encapsulates/activates/deactivates swap partition. Path A unit of this type monitors files/directories and activates/deactivates a service if the specified file or directory is accessed. Snapshot A unit that creates and saves the current state of all running units. This state can be used to restore the system later. Slice A group of units that manages system resources such as CPU, and memory. Scope A unit that organizes and manages foreign processes. busname A unit that controls DBus system. Каталоги конфигурации systemd #
Список можно посмотреть в man-руководстве systemd.unit
- Пути для поиска модулей системного уровня
- /etc/systemd/system.control/*
- /run/systemd/system.control/*
- /etc/systemd/system/* — Файлы, созданные администратором
- /run/systemd/system/*
- /lib/systemd/system/* — Файлы, установленные вместе с пакетом приложения
- …
- ~/.config/systemd/user.control/*
- ~/.config/systemd/user/*
- $XDG_CONFIG_DIRS/systemd/user/*
- /etc/systemd/user/*
- $XDG_RUNTIME_DIR/systemd/user/*
- /run/systemd/user/*
- …
Управление службами systemd #
Дейтвие Команда Отобразить состояние systemd systemctl status Отобразить список запущенных модулей systemctl или systemctl list-units Отобразить список упавших модулей systemctl —failed Отобразить список конфигурационных файлов модулей systemctl list-unit-files Отобразить статус модуля по PID процесса systemctl status PID Дейтвие Команда Комментарий Отобразить страницу руководства, ассоциированную с данной службой systemctl help UNIT если указана в конфигурации модуля Отобразить статус модуля systemctl status UNIT показывает запущен или остановлен модуль Проверить включён ли модуль systemctl is-enabled UNIT Управление состоянием службы. Все в данном разделе требуют прав суперпользователя
Дейтвие Команда Запустить модуль systemctl start UNIT Остановить работу модуля systemctl stop UNIT Перезапустить модуль systemctl restart UNIT Дать команду службе перечитать конфигурацию systemctl reload UNIT Перечитать конфигурацию systemd systemctl daemon-reload Настроить автоматический запуск модуля при старте системы systemctl enable UNIT Настроить автоматический запуск модуля при старте системы и сразу запустить его systemctl enable —now UNIT Отключить автоматический запуск модуля при старте системы systemctl disable UNIT Отключить и настроить автоматический запуск модуля systemctl reenable UNIT Управление состоянием системы #
Данные действия надо выполнять от имени суперпользователя
Дейтвие Команда Выключить ОС и перезагрузить компьютер systemctl reboot Выключить ОС и обесточить компьютер systemctl poweroff Приостановить работу ОС с сохранением данных в оперативной памяти systemctl suspend Приостановить работу ОС с сохранением данных в разделе подкачки systemctl hibernate Приостановить работу ОС с гибридным сохранением состояния systemctl hybrid-sleep Указание зависимостей #
- В классическом SysVInit необходимо было следить за включением службы в нужный уровень выполнения
- В рамках systemd каждая служба указывает список зависимостей
- Явные зависимости от других служб
- Неявные зависимости через включение в конкретную цель
- Создание сервиса systemd
- Таймеры systemd вместо crond
Список служб Linux с помощью Systemctl
В Linux служба — это программа, работающая в фоновом режиме . Службы можно запускать по запросу или во время загрузки.
Если вы используете Linux в качестве основной операционной системы или платформы разработки, вы будете иметь дело с различными службами, такими как веб-сервер, ssh или cron . Знание того, как перечислить запущенные службы или проверить статус службы, важно при отладке системных проблем.
Большинство последних дистрибутивов Linux используют systemd в качестве системы инициализации и диспетчера служб по умолчанию.
Systemd — это набор инструментов для управления системами Linux. Он используется для загрузки машины, управления службами, автоматического монтирования файловых систем, регистрации событий, настройки имени хоста и других системных задач.
В этой статье объясняется, как составить список служб в Linux.
Список служб Linux
Systemd использует концепцию модулей, которыми могут быть службы, сокеты, точки монтирования, устройства и т. Д. Модули определяются с помощью текстовых файлов в формате ini . Эти файлы содержат информацию об устройстве, его настройках и командах для выполнения. Расширения файлов определяют тип файла модуля. Например, файлы системных сервисных модулей имеют расширение .service .
systemctl — это утилита командной строки, которая используется для управления systemd и службами. Он является частью экосистемы systemd и по умолчанию доступен во всех системах.
Чтобы получить список всех загруженных служебных единиц, введите:
sudo systemctl list-units --type service
UNIT LOAD ACTIVE SUB DESCRIPTION cron.service loaded active running Regular background program processing daemon .
Каждая строка вывода содержит следующие столбцы слева направо:
- UNIT — Название сервисной единицы.
- LOAD — Информация о том, загружен ли файл объекта в память.
- ACTIVE — состояние активации файла модуля высокого уровня, которое может быть активным, перезагружающимся, неактивным, неудачным, активируемым, деактивируемым. Это обобщение столбца SUB .
- SUB — состояние активации файла юнита низкого уровня. Значение этого поля зависит от типа объекта. Например, модуль типа service может находиться в одном из следующих состояний: неработающий, завершенный, сбойный, неактивный или работающий.
- DESCRIPTION — Краткое описание файла объекта.
По умолчанию команда перечисляет только загруженные активные юниты. Чтобы увидеть загруженные, но неактивные модули, передайте параметр —all :
sudo systemctl list-units --type service --all
Если вы хотите увидеть все установленные файлы модулей, а не только загруженные, используйте:
sudo systemctl list-unit-files
Отображение статуса службы
Чтобы проверить статус службы, используйте команду systemctl status :
sudo systemctl status .service
Где — это имя сервисной единицы, которую вы хотите проверить. Например, чтобы определить текущий статус службы nginx, вы должны запустить:
sudo systemctl status nginx.service
Вы можете опустить суффикс «.service». systemctl status nginx такое же, как systemctl status nginx.service .
● nginx.service - A high performance web server and a reverse proxy server Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2020-12-23 19:13:50 UTC; 5s ago Docs: man:nginx(8) Process: 3061052 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Process: 3061063 ExecStart=/usr/sbin/nginx -g daemon on; master_process on; (code=exited, status=0/SUCCESS) Main PID: 3061064 (nginx) Tasks: 2 (limit: 470) Memory: 6.0M CGroup: /system.slice/nginx.service ├─3061064 nginx: master process /usr/sbin/nginx -g daemon on; master_process on; └─3061065 nginx: worker process Dec 23 19:13:50 linuxize.dev systemd[1]: Starting A high performance web server and a reverse proxy server.
Команда напечатает следующую информацию:
- Loaded — Loaded ли служебный модуль и полный путь к файлу модуля. Он также показывает, разрешен ли запуск устройства во время загрузки.
- Active — активна и работает ли служба. Если ваш терминал поддерживает цвета, а служба активна и работает, точка ( ● ) и часть «активен (работает)» будут напечатаны зеленым цветом. Строка также показывает, как долго работает служба.
- Docs — служебная документация.
- Process — информация о процессах обслуживания.
- Main PID — сервисный PID.
- Tasks — количество задач, учитываемых для объекта, и лимит задач.
- Memory — информация об используемой памяти.
- CGroup — информация о связанных контрольных группах.
Если вы хотите только проверить статус службы, используйте команду systemctl is-active . Например, чтобы убедиться, что служба nginx запущена, вы должны запустить:
systemctl is-active nginx.service
Команда покажет вам статус службы. Если служба активна, команда возвращает статус выхода 0, что может быть полезно при использовании команды внутри сценариев оболочки.
Выводы
Мы показали вам, как использовать команду systemctl для systemctl списка служб Linux и проверки их статуса.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии ниже.