Linux какая система инициализации

Какая система инициализации используется в данный момент?

Насколько я понял upstart, программа, запускающая все остальные программы в системе, использует скрипты в /etc/init . В то время как её аналог systemd использует для запуска программ скрипты из /etc/init.d . Но у меня есть две этих папки /etc/init и /etc/init.d . В каждой из них есть скрипт запуска nginx. Они отличаются содержимым. Так вряд ли было бы, будь у них одинаковый функционал. Как определить, какая служба используется для управления процессами: Upstart, systemd, стандартный init?

init.d — это вообще для старого sysvinit и используется для обратной совместимости и в upstart, и в systemd

@MishaPolitaev просто init, что то очень нестандартное. Видел где то такой каталог, но к загрузке системы он отношения не имел. Так что init.d лучше смотрите. И еще в rc.d (rc.3 и т.п.), если они есть лежат ссылки на все, что запускается.

2 ответа 2

sysvinit и прочие пришедшие ему на замену системы инициализации unix-подобных операционных систем могут присутствовать в отдельно взятой установке одновременно.

какой первый процесс запустит программа, выполняющая функции ядра операционной системы, после собственной загрузки и инициализации, «того и тапки».

если эти функции исполняет программа linux, то по умолчанию она запускает программу/скрипт, находящийся в файле /sbin/init . данное поведение можно переопределить, передав параметр загрузки init=/путь/к/файлу . узнать, передан ли такой параметр, несложно:

лишь по одному «внешнему виду» файла /sbin/init определить, какой именно из систем инициализации он принадлежит, затруднительно. разве что он является символической ссылкой на файл с более «выразительным» именем. например:

$ ls -l /sbin/init lrwxrwxrwx 1 root root 20 Aug 29 18:45 /sbin/init -> /lib/systemd/systemd 

но если в данной установке используется пакетный менеджер, то, скорее всего, этот файл принадлежит какому-нибудь пакету. примеры запросов к пакетным менеджерам:

$ dpkg -S /sbin/init $ rpm -qf /sbin/init $ equery belongs /sbin/init $ pacman -Qo /sbin/init . 

Источник

Читайте также:  Desktop environments linux mint

Sysadminium

Из этой статьи вы узнаете что такое система инициализации SystemD, её основную цель, а также познакомимся с юнитами SystemD.

Что такое система инициализации

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

Алгоритм загрузки операционной системы я описывал в этой статье.

Систем инициализации много, первой такой системой была SysV, потом для Ubuntu написали Upstart. Но сейчас система инициализации SystemD становится системой инициализации по умолчанию во многих популярных дистрибутивах Linux. В том числе и в Ubuntu 22.04, и в Debian 11.

В этой статье я некоторые примеры выполнял на Debian 11, а другие на Ubuntu 22.04, разницы нет никакой. Единственная разница — это версия SystemD:

Как видите в Ubuntu она поновее.

В первой системе инициализации SysV программа инициализации называлась init, для совместимости в SystemD оставили это название, но init это всего лишь символьная ссылка на systemd.

С помощью утилиты ps мы можем узнать какой процесс в системе является первым, то есть у какого процесса номер равен единице (PID=1).

alex@deb:~$ ps 1 PID TTY STAT TIME COMMAND 1 ? Ss 0:10 /sbin/init

Из вывода мы узнали, что первым процессом в системе является процесс приложения /sbin/init.

Посмотрим, что это за файл:

alex@deb:~$ ls -l /sbin/init lrwxrwxrwx 1 root root 20 мар 20 22:55 /sbin/init -> /lib/systemd/systemd

Таким образом я подтвердил вам, что /sbin/init это всего лишь символьная ссылка на /lib/systemd/systemd.

Основная цель SystemD

Основная цель systemd это ускорение загрузки операционной системы за счет распараллеливания запуска процессов и отложенного запуска.

Читайте также:  Linux установка обновлений из командной строки

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

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

Юниты

Все задачи которые выполняет SystemD описываются в специальных файлах, которые называются юниты (unit). Юниты бывают разных типов, в этом курсе мы рассмотрим только три типа юнитов:

  • service — описывает сервис (службу) или скрипт, в общем все то что можно запустить;
  • target — группирует юниты, то есть мы можем объединить две службы и запускать их как одну;
  • timer — определяет таймер (аналог cron). То есть службы могут запускаться по определённому расписанию, или с задержкой.

Вот примеры юнитов разных типов:

alex@deb:~$ ls -l /lib/systemd/system/ssh.service -rw-r--r-- 1 root root 538 мар 13 2021 /lib/systemd/system/ssh.service alex@deb:~$ ls -l /lib/systemd/system/default.target lrwxrwxrwx 1 root root 16 мар 20 22:55 /lib/systemd/system/default.target -> graphical.target alex@deb:~$ ls -l /lib/systemd/system/logrotate.timer -rw-r--r-- 1 root root 191 окт 14 2019 /lib/systemd/system/logrotate.timer
  • ssh.service — служба ssh сервера, с помощью которого мы удалённо управляем linux системой;
  • default.target — таргет который запускается при включении системы по умолчанию, при этом запускаются службы у которых настроен автозапуск для этого таргета.
  • logrotate.timer — таймер, который запускает службу logrotate.service для ротации логов.

Список всех активных юнитов в системе можно посмотреть с помощью следующей команды:

alex@ubu:~$ systemctl list-units

Но так как юнитов слишком много, обычно выводят не все юниты а юниты определённого типа, например:

alex@ubu:~$ systemctl list-units -t service alex@ubu:~$ systemctl list-units -t timer alex@ubu:~$ systemctl list-units -t target

Если нужно получить список не только активных юнитов, то просто добавьте опцию all, например:

alex@ubu:~$ systemctl list-units -t target --all

Расположение юнитов

Юниты можно найти в следующих каталогах:

  • /lib/systemd/system — системные юниты, устанавливаются обычно вместе с приложениями. Они имеют самый низкий приоритет.
  • /run/systemd/system — динамически создаваемые юниты. Имеют средний приоритет.
  • /etc/systemd/system — юниты создаваемые вручную. Имеют наивысший приоритет.
alex@s-deb:~$ ls -ld /*/systemd/system drwxr-xr-x 9 root root 4096 июн 20 15:09 /etc/systemd/system drwxr-xr-x 19 root root 36864 июн 20 15:09 /lib/systemd/system drwxr-xr-x 2 root root 40 июл 11 12:50 /run/systemd/system

Если мы создадим юнит в каталоге /etc/systemd/system, и с таким-же именем будет юнит в /lib/systemd/system, то наш созданный юнит будет иметь более высокий приоритет.

Читайте также:  Virtualbox установка настройка linux

Итог

Вот мы и познакомились с системой инициализации SystemD, которая используется в Debian 11 и в Ubuntu 22.04 по умолчанию. В следующих статьях подробнее разберёмся с юнитами, и даже напишем свой сервис и таймер. А затем пробежимся по основным утилитам этой системы.

Узнали новую команду systemctl, с помощью которой в этой статье смотрели список юнитов в системе:

systemctl list-units # все активные юниты systemctl list-units --all # все юниты (не только активные) systemctl list-units -t # активные юниты определённого типа systemctl list-units -t --all # все юниты определённого типа

Источник

Оцените статью
Adblock
detector