Привет, %username%! В Linux после загрузки ядра начинается инициализация системы, сервисов и других компонентов. За это отвечает процесс с PID 1, называемый “init proccess” или “процесс инициализации”. Он запускается ядром сразу после завершения загрузки и будет выполняться пока будет работать система.

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

А теперь посмотрим на то, какие именно бывают процессы инициализации.

System V

System V или SysV - это довольно старая система инициализации, которая до сих пор пользуется не малой популярностью. Была основой для создания многих других систем инициализации и разработана еще в 1983 году. Большая часть дистрибутивов Linux изначально использовали SysV.

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

  • Написание файлов запуска служб на bash;
  • Последовательный запуск служб;
  • Сортировка порядка запуска с помощью номеров в именах файлов;
  • Команды для запуска, остановки и проверки состояния служб.

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

Systemd

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

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

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

  • Понятный, простой и эффективный дизайн;
  • Поддерживается планирование заданий с помощью таймеров Systemd;
  • Поддерживается управление сетью с помощью networkd;
  • Для управления DNS используется systemd-resolved;
  • Хранение журналов в бинарных файлах;
  • Параллельная загрузка служб на основе зависимостей;
  • Сохранение состояния сервисов linux systemd для возможного восстановления;
  • Улучшенная интеграция с Gnome;
  • Запуск сервисов по требованию;
  • Поддерживается завершение дополнительных процессов;
  • Поддерживается собственный журнал с помощью journald;

Дополнительно почитать в Wikipedia.

Upstart

Upstart - это система инициализации на основе событий, разработанная в Canonical и призванная заменять SysV. Она может запускать системные службы, выполнять над ними различные задачи, инспектировать их во время выполнения, а также выполнять нужные действия в ответ на события в системе.

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

  • Изначально разработанная для Ubuntu, но может использоваться и в других дистрибутивах;
  • Параллельная загрузка сервисов;
  • Связь с процессом инициализации через DBus;
  • Пользователи могут запускать и останавливать свои процессы;
  • Перезапуск служб, которые неожиданно завершились;
  • Автоматический перезапуск служб;
  • Запуск и остановка служб на основе событий;
  • Генерация событий во время запуска и остановки служб;
  • События могут быть отправлены обычными процессами;

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

Дополнительно почитать в Wikipedia.

Runit

Runit - это кроссплатформенная система инициализации, которая может работать в GNU Linux, Solaris, BSD и MacOS. Это отличная альтернатива для SysV с поддержкой мониторинга состояния служб.

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

  • Быстрая система загрузки и выключения;
  • Портативность;
  • Небольшое количество кода системы инициализации.
  • Легкое создание файлов конфигурации служб;
  • Полный контроль сервисов, каждый сервис привязывается к своему каталогу;
  • Надежное средство журналирования и ротации логов;

Дополнительно почитать в Wikipedia.

OpenRC

OpenRC - это система инициализации Linux и Unix подобных операционных систем совместимая с SysV и поддерживающая систему зависимостей во время запуска. Она приносит некоторые улучшения в SysV, и как и другие системы инициализации Linux, совместима с ней, но вы должны иметь в виду, что OpenRC не заменяет полностью файл /sbin/init. Эта система инициализации используется в Gentoo и дистрибутивах BSD.

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

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

Дополнительно почитать в Wikipedia.

Итоги

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

На этом всё! Profit!


Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат, а так же подписывайся на канал.