Как узнать какая система инициализации используется в linux
Перейти к содержимому

Как узнать какая система инициализации используется в linux

  • автор:

Системы инициализации Linux. Сравнение SysV и systemd

В Linux существуют специальные службы — демоны — работающие в фоновом режиме и обслуживающие другие программы. Инициализация и управление демонами происходит с помощью специального процесса инициализации. Ядро, сразу после своей загрузки, запускает процесс инициализации, который приводит к запуску всех необходимых служб и программ. Для этого считывается соответствующий файл конфигурации и на основе описанных в нем параметров начинается запуск системы. Данный процесс инициализации является главным (или «родительським») процессом, который переводит систему из состояния «ядро запущено» к состоянию «система готова к работе».

Примечание: В системе инициализации SysV главным процессом является процесс init, а в системе инициализации systemd — (одноименный) процесс systemd.

С течением времени в Linux появилось большое разнообразие систем инициализации. В данной статье мы рассмотрим наиболее популярные из них, а также сравним SysV и systemd.

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

System V init (или просто «SysV») — это система инициализации, которая существует со времен операционной системы System V, которая была выпущена в 1983 году. SysV оставалась системой инициализации в течение почти трех десятилетий (за некоторыми исключениями). Многие IT-специалисты и программисты в силу своей привычки не хотели отказываться от SysV, да и к тому же она была очень простой для понимания.

Проблема с SysV заключалась в том, что в её основе лежали концепции, существовавшие много лет назад. SysV не хватало возможности нативно обрабатывать многие вещи, такие как: обнаружение съемных носителей, корректное обнаружение аппаратного обеспечения и загрузка встроенного ПО, загрузка различных модулей и пр. Кроме того, при использовании данной системы, инициализация процессов происходит последовательно, т.е. одна задача запускается только после успешного завершения предыдущей. Часто это приводило к задержке и длительному времени загрузки. Задачи, подобные монтированию файловых систем, выполняются один раз во время загрузки, после чего «забываются». Но такого подхода недостаточно для автоматизированного управления сервисами, требующими к себе постоянного внимания.

В попытке привнести больше возможностей в процесс инициализации Linux-систем, компания Canonical в 2006 году вместе с релизом Ubuntu 6.10 (Edgy Eft) выпускает систему инициализации Upstart, которая с самого начала разрабатывалась с учетом обратной совместимости. Она может запускать демоны без каких-либо изменений в их скриптах запуска.

Другой системой инициализации, восходящей своими корнями к операционной системе 4.4BSD, является rc.init. Она применяется в таких дистрибутивах, как: FreeBSD, NetBSD и Slackware. В 2007 году разработчики Gentoo выпустили улучшенный вариант данной системы инициализации, сделав её модульной и назвав OpenRC. Большинство других дистрибутивов Linux исторически продолжало использовать SysV.

В 2010 году инженеры компании Red Hat Леннарт Пёттеринг и Кей Сиверс приступили к разработке новой системы инициализации — systemd, которая разрабатывалась с учетом недостатков, имеющихся в SysV. В состав systemd, помимо прочего, также входят и различные пакеты, утилиты и библиотеки, позволяющие производить параллельный запуск процессов, сокращая тем самым время загрузки системы и количество необходимых вычислений. Весной того же года Fedora 15 стала первым дистрибутивом, в котором по умолчанию использовалась система инициализации systemd. После чего, на протяжении следующих трех лет, большинство дистрибутивов массово перешли на systemd.

Но, если все остальные дистрибутивы отдают предпочтение systemd и считают её лучшей системой инициализации, как для предприятий, так и для любителей, почему так много споров вокруг нее?

systemd, по сравнению с SysV и Upstart, содержит большое количество различных улучшений, а также предлагает и другие компоненты, имеющие более тесную интеграцию с системой, с помощью которых разработчики могут уменьшить объем выполняемой работы. Что в этом плохого? Ну, поскольку разработчики создают программное обеспечение, которое зависит от systemd и/или от любой из её многочисленных служб (journald, udevd, consoled, logind или networkd), то такое ПО становится менее совместимым с системами, в которых systemd не применяется. По мере того, как количество служб, предоставляемых проектом systemd, продолжает расти, systemd сама становится все более зависимой от них.

В результате systemd становится самостоятельной платформой, и её повсеместное распространение непреднамеренно препятствует разработке программного обеспечения, которое является переносимым и совместимым с операционными системами, не поддерживающими systemd. Но действительно ли всё так печально? Конечно, нет. Прежде всего, это проект с открытым исходным кодом, и у людей есть выбор: использовать его или нет. Пользователи и разработчики могут извлечь выгоду из наличия нескольких конкурирующих систем инициализации, и нет вины systemd в том, что основные дистрибутивы переключились на нее из-за её плюсов.

Системы инициализации Linux

System V init (или просто «SysV») — это система инициализации, которая существует со времен операционной системы System V.

Примечание: System V — это первая коммерческая UNIX-подобная операционная система, которая была выпущена в 1983 году.

Процесс init (от англ. «initialization») — это первый запускаемый в системе процесс (не считая загрузки ядра), который является родителем (прямым или косвенным) всех других запущенных процессов, и которому присваивается PID=1.

Если процесс init по каким-либо причинам не смог стартовать, то не произойдет запуска последующих процессов и система перейдет в особое (вызванное появлением критической ошибки) состояние ядра, называемое Kernel Panic.

В SysV имеется шесть состояний системы, известных как уровни выполнения (runlevels), и всем процессам и службам сопоставляется определенный уровень выполнения. Данная система инициализации также предлагает простые в использовании команды и методы для управления уровнями выполнения и связанными с ними службами.

Runlevel 0 — завершает работу системы.

Runlevel 1 — однопользовательский режим работы. Чаще всего используется в целях обслуживания и выполнения других административных задач. Этот уровень также может называться Runlevel S (от англ. «Single-user»). Если вам когда-либо приходилось сбрасывать пароль на Linux, то вы вероятно уже пользовались этим режимом.

Runlevel 2 — многопользовательский режим работы (англ. «multi-user») без поддержки сетевых служб.

Runlevel 3 — многопользовательский режим с поддержкой сети, но без графического интерфейса. Чаще всего серверные версии Linux работают именно на этом уровне выполнения.

Runlevel 4 — не используется. Пользователь может настраивать этот уровень исходя из его целей.

Runlevel 5 — схож с режимом 3, но здесь запускается графический интерфейс. В этом режиме работают десктопные версии Linux.

Runlevel 6 — перезагружает систему.

Значения для каждого уровня выполнения варьируются в зависимости от вашего дистрибутива Linux. Есть дистрибутивы (например, Ubuntu), которые используют Runlevel 2 для многопользовательского графического режима с поддержкой сети, другие дистрибутивы (например, Fedora) для того же самого используют Runlevel 5.

В операционной системе, использующей SysV, ядро запускает файл /sbin/init, который, в свою очередь, загружает параметры и выполняет директивы, определенные в файле конфигурации — /etc/inittab. Этот файл задает уровни выполнения для всей системы, определяет, для каких терминалов следует создавать getty (процессы инициализации терминала), запускает процессы входа в терминал, запускает скрипт /etc/init.d/rcS, а также влияет на порядок выполнения других runlevel-скриптов.

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

Кроме этого, у SysV есть проблемы с т.н. «hot-plug» подключением устройств: если операционная система уже загрузилась и находится в рабочем состоянии, и вы подключаете к ней USB-устройство, то SysV не распознает данное USB-устройство.

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

# service <имя_службы> status (отображение статуса конкретной службы)

# service —status–all (отображение статуса всех служб)

# service <имя_службы> start|stop (запуск/остановка конкретной службы)

systemd

systemd — это относительно новая система инициализации Linux, представляющая собой набор утилит для запуска и управления всеми типами процессов и служб (а также устройствами, сокетами, точками монтирования, областью подкачки, модулями и пр.).

Основные цели проектирования данной системы инициализации, по словам Леннарта Пёттеринга, ведущего разработчика systemd, заключаются в том, чтобы «запускать меньше, распараллеливать больше». Это означает, что вы запускаете только те процессы, которые сто процентов необходимы для приведения системы в рабочее состояние, и одновременно выполняете как можно больше таких задач. Все вызовы, которые раньше (при использовании SysV) были «размазаны» по множеству различных скриптов, теперь выполняются одним файлом — lib/systemd/systemd. Первоначально systemd выпускалась под лицензией GNU GPL, но в дальнейшем её сменили на GNU LGPL.

Процесс systemd (от англ. «system management daemon») — это системный демон, который (подобно процессу init) является родителем (прямым или косвенным) всех других процессов, и имеет PID=1 . Вместе с systemd были введены и новые понятия:

Unit — это модуль, отвечающий за отдельно взятую службу, точку монтирования, подключаемое устройство, файл подкачки, виртуальную машину и тому подобные ресурсы.

Target — это аналог уровней выполнения из SysV, состоящий из нескольких unit-ов.

systemd выполняет unit для достижения target. Инструкции для каждого устройства находятся в каталоге /lib/systemd/system/.

Для управления службами в systemd применяется специальная утилита — systemctl. Например:

# systemctl enable sshd (включение sshd)

# systemctl start sshd (запуск sshd)

# systemctl stop sshd (остановка sshd)

# systemctl status sshd (отображение состояния sshd)

# systemctl list-units (отображение списка модулей)

Еще одной важной программой в наборе инструментов systemd является утилита journalctl. Она позволяет просматривать и управлять демоном логов journald. Лог-файл systemd является двоичным файлом, и использование journalctl сильно упрощает работу с ним. Вот несколько примеров:

# journalctl –all (отображение содержимого всего лог-файла)

# journalctl -b (отображение данных лог-файла с момента последней загрузки)

# journalctl -b -p err (отображение ошибок при последней загрузке)

Плюсы системы инициализации systemd:

Новый, современный и эффективный дизайн.

Более простой процесс загрузки.

Параллельная обработка задач при загрузке системы.

Простой синтаксис unit-файлов.

Возможность удаления дополнительных компонентов.

Низкий уровень потребления ресурсов.

Улучшен механизм зависимостей.

Инструкция инициализации процессов хранится в файле конфигурации, а не в скрипте оболочки.

Планирование задач с использованием systemd Calendar Timers.

Ведение лог-файла с помощью службы journald.

Лог-файлы хранятся в двоичных файлах.

Состояние systemd может быть сохранено для последующего вызова в будущем.

Отслеживание исполняемого процесса через механизм контейнеризации cgroup.

Вход пользователей в систему управляется с помощью systemd-logind.

Улучшенная интеграция с GNOME для обеспечения совместимости.

Минусы системы инициализации systemd:

Всё собрано в одном месте.

Не соответствует стандартам POSIX.

Дистрибутивы Linux Интеграция
Fedora Да (это первый дистрибутив, перешедший на systemd).
Arch Да.
RHEL Да.
CentOS Да.
Debian Да, начиная с 8-й версии.
OpenSUSE Да.
Slackware Нет.
Ubuntu Да.

Upstart

Upstart — это гибридная система инициализации (могут использоваться как скрипты запуска SysV, так и сценарии systemd), созданная разработчиками дистрибутива Ubuntu в качестве замены системы инициализации SysV. В отличие от SysV, которая создавалась для работы в статическом окружении, Upstart предназначалась для работы в более гибком окружении.

По сравнению с SysV, в Upstart можно выделить три основных преимущества, а именно: управление службами на основе событий (вместо уровней выполнения), асинхронный запуск служб и автоматический перезапуск аварийно завершенных служб.

Основное отличие от SysV заключается в том, что Upstart реализует управляемую событиями модель, которая позволяет асинхронно реагировать на основные этапы запуска служб по мере их достижения. Для этого в Upstart существуют задания, прописанные в файлах в /etc/init/*.conf, целью которых является выполнение секции скрипта, ответственной за создание процесса. Таким образом, инициализация системы может быть выражена в виде последовательного набора правил «создавать процесс X при наступлении события Y».

Когда происходит какое-либо событие, Upstart обнаруживает это событие и вносит необходимые изменения. Событием может быть всё, что связано с различными состояниями системы, например: USB-накопитель подключается/извлекается из системы или запускается/останавливается служба.

Но и у данной системы инициализации есть свои минусы. Так как в её основе заложена событийная модель реагирования, то вместо выполнения абсолютного минимального объема работы, необходимого для приведения системы в рабочее состояние, при срабатывании события Upstart выполняет все задания, которые могут последовать за ним. Например, если запустилась сеть, это еще не значит, что NFS (сокр. от «Network File System») также должна запуститься. На самом деле, корректная последовательность является противоположной: когда пользователь запрашивает доступ к общему ресурсу NFS, система должна проверить, что сеть запущена и работает.

Для управления уровнем запуска различных служб в Upstart применяется специальная утилита — initctl, например:

$ initctl status <job> (отображение состояния службы)

$ initctl list (отображение списка служб)

# initctl start|stop <job> (запуск/остановка службы)

OpenRC

OpenRC — это кроссплатформенная система инициализации на основе зависимостей, которая совместима с SysV. Несмотря на то, что OpenRC вносит некоторые улучшения в SysV, она не является её абсолютной заменой.

Может работать во многих дистрибутивах Linux, включая Gentoo.

Скрипты инициализации с отслеживанием состояния.

Ограничение ресурсов для каждой службы.

Загрузка на основе зависимостей.

Запускается в виде демона.

Параллельный запуск служб и многое другое.

runit

runit — также кроссплатформенная система инициализации, которая может работать на Solaris, операционных системах семейства BSD и macOS. В целом очень похожа на SysV. Может использоваться сама по себе или же в качестве альтернативы для SysV, systemd, а также в сочетании с OpenRC.

К основным преимуществам runit относятся:

Быстрая загрузка и выключение системы.

Логирование вывода процесса и ротация логов.

Автоматическое выключение и запуск сервисов при появлении новых сервисов в списке, либо удалении старых из списка.

Возможность ведения нескольких независимых списков сервисов одновременно (например, для каждого пользователя отдельно и для системы в целом).

Сравнение SysV и systemd

Функции SysV systemd
Зависимость D-Bus Нет Да
Управление устройствами с помощью udev Нет Да
Активация по таймеру cron/at Проприетарная
Управление квотами Нет Да
Автоматическая обработка зависимостей служб Нет Да
Завершение процессов пользователей при выходе из системы Нет Да
Управление пространством подкачки Нет Да
Интеграция SELinux Нет Да
Поддержка шифрованных HDD Нет Да
Загрузка статических модулей ядра Нет Да
Графический интерфейс пользователя (GUI) Нет Да
Перечисление всех дочерних процессов Нет Да
Совместимость с SysV Да Да
Интерактивная загрузка Нет Да
Переносимость на отличную от x86 архитектуру процессора Да Нет
Параллельный запуск служб Нет Да
Ограничение ресурсов для каждой службы Нет Да
Легко расширяемый скрипт автозагрузки Да Нет
Раздельные код и файл конфигурации Да Нет
Автоматический расчет зависимостей Нет Да
Подробный вывод отладочной информации Да Нет
Количество файлов 75 файлов 900 файлов + Glib + D-Bus

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

Способ №1: Команда ps

С помощью команды ps мы можем отобразить информацию об активном процессе, а с помощью команды grep указать необходимые фильтры для определения текущей системы инициализации:

# ps -p1 | grep «init\|upstart\|systemd»

Debian 11 (Testing)

Fedora 34 Workstation

Как вы можете видеть, в Debian и Fedora используется система инициализации systemd.

В случае использования системы инициализации SysV, вывод команды будет следующий:

Если же у вас используется система инициализации Upstart, то вы увидите:

# ps -p1 | grep «init\|upstart\|systemd»
1 ? 00:00:00 upstart

Способ №2: Команда rpm

rpm (сокр. от «Red Hat Package Manager») — это мощная консольная утилита управления пакетами в дистрибутивах RHEL, CentOS, Fedora, openSUSE и Mageia. Команда rpm позволяет устанавливать, обновлять, удалять, запрашивать и проверять программное обеспечение.

Чтобы узнать, какая система инициализации установлена, нужно выполнить следующую команду:

# rpm -qf /sbin/init

Примечание: /usr/sbin/init или /sbin/init — это исполняемый файл, запускающий систему инициализации SysV. По соображениям совместимости при установке systemd файл /sbin/init является псевдонимом (или символьной ссылкой) исполняемого файла системы инициализации systemd.

Fedora 34 Workstation

В случае использования системы инициализации SysV, вывод будет следующий:

# rpm -qf /sbin/init
SysVinit -2.86-17.el5

В случае использования системы инициализации Upstart, вывод будет следующий:

# rpm -qf /sbin/init
upstart -0.6.5-16.el6.x86_64

Важное примечание

Может случиться так, что, используя ОС с systemd в качестве системы инициализации и набрав в терминале команды pidof init и pidof systemd , мы увидим следующий результат:

Debian 11 (Testing)

То есть PID=1 назначен процессу init, а процесс systemd имеет PID=909 . Получается, что у нас используется SysV? Но мы ведь уверены в том, что устанавливали дистрибутив (Debian) с системой инициализации systemd! Это можно проверить с помощью следующей команды:

$ sudo ps -p1 | grep «init\|upstart\|systemd»

Debian 11 (Testing)

Так почему же возникла путаница с pidof ? Если мы проверим тип файла /sbin/init (который является файлом, запускающим систему инициализации SysV), то увидим, что в нашем случае /sbin/init является символьной ссылкой на /lib/systemd/systemd (главный файл системы инициализации systemd):

Система инициализации в Unix/Linux

Иногда интересно какая же инициализация используется на сервере и в моей статье «Система инициализации в Unix/Linux» я расскажу как можно узнать какая система инициализации используется на сервере.

Основные системы инициализации:

  • sysvinit — Стиль SysVinit существовал еще со времен SystemV, которая была разработана еще в 1983 году. Это установило стандарт инициализации POSIX систем.
  • upstart — система инициализации ОС, которая управляет запуском демонов в течение загрузки системы, их остановку, а также управляет ими во время работы системы. Первоначально была разработана для дистрибутива Ubuntu, но затем стала использоваться и в других дистрибутивах Linux, например в Fedora (впоследствии была заменена systemd), как замена UNIX System V init.
  • systemd — это системный менеджер, (демон для инициализации других демонов в Linux), который пришел и почти заменил SysV. Основное отличие — распределенный запуск служб в процессе загрузки системы, что позволяло существенно ускорить запуск операционной системы.
  • launchd — система инциализации системы с открытым исходным кодом, используемая в ОС Mac OS X. Процесс имеет PID 1 и занимается тем, что запускает другие процессы и перезапускает их в случае сбоя, то есть выполняет функции init UNIX и Linux (в новых версиях Linux осуществляется переход на systemd).

Команды по системам инициализации в Unix/Linux ОС:

Система инициализации в Unix/Linux

Существует несколько способов проверить это, сейчас я покажу как это сделать.

-=== СПОСОБ 1 — проверка PID процессов==-

Например, Ubuntu до версии 14 использовала систему инициализацию Upstart чтобы проверить это, выполните:

Например, Ubuntu 16 и CentOS 7 использовала систему инициализацию SystemD чтобы проверить это, выполните:

Или если используется Ubuntu 16, можно выполнить:

Или, другой пример:

Или (если чтобы было красиво):

Например, CentOS 6 использовала систему инициализацию Upstart, но с init процессом и чтобы проверить это, выполните:

-=== СПОСОБ 2 — проверка файлов==-

Запускаем следующую команду:

Если на сервере используется init инициализация, то она отобразится при выводе. В противном случае — скажет что такой команды нет.

ИЛИ, можно выполнить:

Вот вам еще довольно стоящий пример:

-=== СПОСОБ 3 — с помощью ФС==-

Можно запустить следующую команду:

Команда что выше, проверяет exe симлинку в папке /proc/1. А собственно «1» – это PID 1-го процесса.

-=== СПОСОБ 4 — с помощью готового bash скрипта==-

И прописываем в него:

Можно добавить прав на исполнение:

И для запуска, юзаем:

-=== СПОСОБ 5 — с помощью пакетного менеджера==-

Если используете centOS/RedHat/Fedora/Suse, то можно выполнить:

Если используете Debian/Ubuntu/Mint/др, то можно выполнить:

-=== СПОСОБ 6 — с помощью lsof==-

Так же, можно выполнить:

-=== СПОСОБ 7 — с помощью ls и which==-

Вот и все. Если имеются другие примеры проверки инициализации, пишите в комментариях. Тема «Система инициализации в Unix/Linux» завершена.

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

как узнать какая система инициализации используется в linux

Uznat sistemu initsializatsii na servere s UnixLinux

Иногда интересно какая же инициализация используется на сервере и в моей статье «Система инициализации в Unix/Linux» я расскажу как можно узнать какая система инициализации используется на сервере.

Основные системы инициализации:

Команды по системам инициализации в Unix/Linux ОС:

Система инициализации в Unix/Linux

Существует несколько способов проверить это, сейчас я покажу как это сделать.

-=== СПОСОБ 1 — проверка PID процессов==-

Например, Ubuntu до версии 14 использовала систему инициализацию Upstart чтобы проверить это, выполните:

Например, Ubuntu 16 и CentOS 7 использовала систему инициализацию SystemD чтобы проверить это, выполните:

Или если используется Ubuntu 16, можно выполнить:

Или (если чтобы было красиво):

Например, CentOS 6 использовала систему инициализацию Upstart, но с init процессом и чтобы проверить это, выполните:

-=== СПОСОБ 2 — проверка файлов==-

Запускаем следующую команду:

Если на сервере используется init инициализация, то она отобразится при выводе. В противном случае — скажет что такой команды нет.

ИЛИ, можно выполнить:

Вот вам еще довольно стоящий пример:

-=== СПОСОБ 3 — с помощью ФС==-

Можно запустить следующую команду:

Команда что выше, проверяет exe симлинку в папке /proc/1. А собственно «1» – это PID 1-го процесса.

-=== СПОСОБ 4 — с помощью готового bash скрипта==-

И прописываем в него:

Можно добавить прав на исполнение:

И для запуска, юзаем:

-=== СПОСОБ 5 — с помощью пакетного менеджера==-

Если используете centOS/RedHat/Fedora/Suse, то можно выполнить:

Если используете Debian/Ubuntu/Mint/др, то можно выполнить:

-=== СПОСОБ 6 — с помощью lsof==-

Так же, можно выполнить:

-=== СПОСОБ 7 — с помощью ls и which==-

Вот и все. Если имеются другие примеры проверки инициализации, пишите в комментариях. Тема «Система инициализации в Unix/Linux» завершена.

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Система инициализации в Unix/Linux

sistema inicializacii v unix

Система инициализации в Unix/Linux

Иногда интересно какая же инициализация используется на сервере и в моей статье «Система инициализации в Unix/Linux» я расскажу как можно узнать какая система инициализации используется на сервере.

Основные системы инициализации:

sysvinit — Стиль SysVinit существовал еще со времен SystemV, которая была разработана еще в 1983 году. Это установило стандарт инициализации POSIX систем.
upstart — система инициализации ОС, которая управляет запуском демонов в течение загрузки системы, их остановку, а также управляет ими во время работы системы. Первоначально была разработана для дистрибутива Ubuntu, но затем стала использоваться и в других дистрибутивах Linux, например в Fedora (впоследствии была заменена systemd), как замена UNIX System V init.
systemd — это системный менеджер, (демон для инициализации других демонов в Linux), который пришел и почти заменил SysV. Основное отличие — распределенный запуск служб в процессе загрузки системы, что позволяло существенно ускорить запуск операционной системы.
launchd — система инциализации системы с открытым исходным кодом, используемая в ОС Mac OS X. Процесс имеет PID 1 и занимается тем, что запускает другие процессы и перезапускает их в случае сбоя, то есть выполняет функции init UNIX и Linux (в новых версиях Linux осуществляется переход на systemd).

Команды по системам инициализации в Unix/Linux ОС:

Система инициализации SysVinit

Система инициализации Systemd

Система инициализации в Unix/Linux

Существует несколько способов проверить это, сейчас я покажу как это сделать.

-=== СПОСОБ 1 — проверка PID процессов==-

Например, Ubuntu до версии 14 использовала систему инициализацию Upstart чтобы проверить это, выполните:

Например, Ubuntu 16 и CentOS 7 использовала систему инициализацию SystemD чтобы проверить это, выполните:

Или если используется Ubuntu 16, можно выполнить:

Или (если чтобы было красиво):

Например, CentOS 6 использовала систему инициализацию Upstart, но с init процессом и чтобы проверить это, выполните:

-=== СПОСОБ 2 — проверка файлов==-

Запускаем следующую команду:

Если на сервере используется init инициализация, то она отобразится при выводе. В противном случае — скажет что такой команды нет.

ИЛИ, можно выполнить:

Вот вам еще довольно стоящий пример:

-=== СПОСОБ 3 — с помощью ФС==-

Можно запустить следующую команду:

Команда что выше, проверяет exe симлинку в папке /proc/1. А собственно «1» – это PID 1-го процесса.

-=== СПОСОБ 4 — с помощью готового bash скрипта==-

И прописываем в него:

Можно добавить прав на исполнение:

И для запуска, юзаем:

-=== СПОСОБ 5 — с помощью пакетного менеджера==-

Если используете centOS/RedHat/Fedora/Suse, то можно выполнить:

Если используете Debian/Ubuntu/Mint/др, то можно выполнить:

-=== СПОСОБ 6 — с помощью lsof==-

Так же, можно выполнить:

-=== СПОСОБ 7 — с помощью ls и which==-

Вот и все. Если имеются другие примеры проверки инициализации, пишите в комментариях. Тема «Система инициализации в Unix/Linux» завершена.

Системы инициализации Linux

В операционной системе Linux и других системах семейства Unix после завершения загрузки ядра начинается инициализация Linux системы, сервисов и других компонентов. За это отвечает процесс инициализации, он запускается ядром сразу после завершения загрузки, имеет PID 1, и будет выполняться пока будет работать система.

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

Системы инициализации Linux

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

1. System V Init

Почти все дистрибутивы Linux изначально использовали SysV. Исключением была только Gentoo, в которой использовалась собственная система инициализации и Slackware, с инициализацией в стиле BSD.

Основные возможности SysV:

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

С момента ее разработки прошло много лет и из-за некоторых недостатков были разработаны другие системы для ее замены, они хоть и имели новые функции и были более эффективны, но они были по-прежнему совместимы с SysV.

2. OpenRC

Кроме стандартных возможностей SysV, здесь поддерживается также:

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

3. Systemd

Systemd очень сильно отличается от всех существующих систем инициализации, тем как она работает с сервисами, и даже конфигурационными файлами сервисов. Совместимости со скриптами SysV нет, их нужно преобразовать в linux systemd unit файлы.

Вот ее основные особенности:

4. Runinit

Здесь есть некоторые интересные особенности, которых нет в других системах инициализации:

5. Upstart

Это гибридная система инициализации, она использует как SysV скрипты запуска, так и файлы служб Systemd. Вот ее самые заметные особенности:

Большинство ее возможностей работают благодаря интеграции с системой инициализации Systemd. В последнее время всё меньше используются скрипты SysV init и всё больше применяются юнит файлы Systemd. Рано или поздно Systemd вытеснит и полностью заменит Upstart в Ubuntu.

Выводы

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

Какие системы инициализации Linux используются в вашем дистрибутиве? В списке обозначены не все существующие системы, какую из них нужно добавить в список? Напишите в комментариях!

Определить систему инициализации с помощью оболочки

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

Fedora 15 и Ubuntu теперь используют systemd, Ubuntu раньше использовал Upstart (долгое время по умолчанию до 15.04), в то время как другие используют варианты System V.

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

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

Вот что я придумал:

Каков наилучший кроссплатформенный способ сделать это?

Вид связанных, Могу ли я рассчитывать на то, что bash будет работать на большинстве * nix или это зависит от дистрибутива / ОС?

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

Я сам вошел в эту проблему и решил сделать несколько тестов. Я полностью согласен с ответом, что каждый пакет должен быть упакован отдельно, но иногда есть практические проблемы, которые мешают этому (не в последнюю очередь человеческие ресурсы).

Так что для тех, кто хочет «автоматически определять», вот что я обнаружил на ограниченном наборе дистрибутивов (подробнее ниже):

Вы можете сказать выскочку из:

Вы можете сказать systemd из:

Вы можете сказать sys-v init из:

Вот мои эксперименты со следующей командной строкой:

в случае с ec2 (я включаю идентификатор AMI с восточной стороны США):

Системы инициализации Linux

sistemy inicializacii

В операционной системе Linux и других системах семейства Unix после завершения загрузки ядра начинается инициализация Linux системы, сервисов и других компонентов. За это отвечает процесс инициализации, он запускается ядром сразу после завершения загрузки, имеет PID 1, и будет выполняться пока будет работать система.

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

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

1. System V Init

Почти все дистрибутивы Linux изначально использовали SysV. Исключением была только Gentoo, в которой использовалась собственная система инициализации и Slackware, с инициализацией в стиле BSD.

Основные возможности SysV:

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

С момента ее разработки прошло много лет и из-за некоторых недостатков были разработаны другие системы для ее замены, они хоть и имели новые функции и были более эффективны, но они были по-прежнему совместимы с SysV.

2. OpenRC

Кроме стандартных возможностей SysV, здесь поддерживается также:

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

3. Systemd

Systemd очень сильно отличается от всех существующих систем инициализации, тем как она работает с сервисами, и даже конфигурационными файлами сервисов. Совместимости со скриптами SysV нет, их нужно преобразовать в linux systemd unit файлы.

Вот ее основные особенности:

4. Upstart

Это гибридная система инициализации, она использует как SysV скрипты запуска, так и файлы служб Systemd. Вот ее самые заметные особенности:

Большинство ее возможностей работают благодаря интеграции с системой инициализации Systemd.

5. Runinit

Здесь есть некоторые интересные особенности, которых нет в других системах инициализации:

Выводы

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

Какие системы инициализации Linux используются в вашем дистрибутиве? В списке обозначены не все существующие системы, какую из них нужно добавить в список? Напишите в комментариях!

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

Насколько я понял upstart, программа, запускающая все остальные программы в системе, использует скрипты в /etc/init . В то время как её аналог systemd использует для запуска программ скрипты из /etc/init.d .

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

Как определить, какая служба используется для управления процессами: Upstart, systemd, стандартный init?

aleksandr barakin's user avatar

Mikhail Politaev's user avatar

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

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

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

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

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

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

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