Инициализация системы

Привет, %username%! В Linux после загрузки ядра начинается инициализация системы, сервисов и других компонентов. За это отвечает процесс с PID 1, называемый “init proccess” или “процесс инициализации”. Он запускается ядром сразу после завершения загрузки и будет выполняться пока будет работать система.
🔄 Обновлено 2026-05-15: обзорная часть про SysV/systemd/Upstart/Runit/OpenRC валидна. В конце добавил блок «
systemdдля повседневной работы» — про то, что в systemd за 4-5 лет реально пригодилось админу:systemctl edit(drop-in без редактирования юнитов),systemd-run(запуск разовых задач в нормальном scope),systemd-oomd(userspace-killer вместо OOM ядра), soft-reboot для k8s-нод, journald-utils.
Процесс инициализации запускает все процессы, которые должны быть запущены и является для них родительским процессом. Все процессы, которые запускает процесс инициализации, так же могу порождать дочерние процессы.
А теперь посмотрим на то, какие именно бывают процессы инициализации.
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 для повседневной работы#
Раз в большинстве систем systemd, давай по верхам пробежимся по штукам, без которых системный администратор в 2026-м точно не должен жить — они почти все появились или стабилизировались как раз за последние 4-5 лет.
systemctl edit — drop-in вместо правки юнита#
Никогда не редактируй /usr/lib/systemd/system/*.service руками — твои правки снесёт при обновлении пакета. Вместо этого:
sudo systemctl edit nginx.serviceОткроется редактор с пустым drop-in файлом в /etc/systemd/system/nginx.service.d/override.conf. Кладёшь туда только то, что меняешь — например:
[Service]
LimitNOFILE=65536
Environment="ENV=production"После выхода из редактора systemd daemon-reload уже не нужен — systemctl edit сам перезагрузит конфиг. А systemctl edit --full откроет копию юнита целиком, если хочется переписать его полностью.
systemd-run — разовый запуск в scope#
Запустить любую команду как полноценный systemd-юнит можно без написания .service-файла:
# фоновый бэкап с лимитами и таймаутом
sudo systemd-run \
--unit=db-backup \
--property=MemoryMax=2G \
--property=CPUQuota=50% \
--on-active=5min \
--timer-property=AccuracySec=1us \
/usr/local/bin/pg_dump_app.sh
# таймер для регулярного запуска прямо из строки
sudo systemd-run --on-calendar="hourly" /usr/local/bin/sync.shЭто альтернатива at/nohup/tmux/cron для одноразовых задач — с готовыми логами в journald и нормальной изоляцией.
systemd-oomd — userspace OOM-killer#
Ядерный OOM-killer срабатывает поздно и часто прибивает не тот процесс. systemd-oomd (по умолчанию включён в Ubuntu 22.04+ и Fedora) работает в userspace и принимает решения до того, как система упрётся в стенку — через cgroup’ы и метрики PSI (Pressure Stall Information). По дороге пишет в journald, кого и почему придушил:
journalctl -u systemd-oomd.serviceНастройка — OOMPolicy=kill|stop|continue в юнитах + /etc/systemd/oomd.conf.
Soft-reboot для горячих обновлений#
systemd 254 (август 2023) принёс soft-reboot
— перезагрузку userspace без перезагрузки ядра. Сценарий: обновил все пакеты, надо «начать с чистого PID 1», но даунтайм от полной перезагрузки слишком дорогой:
sudo systemctl soft-rebootВсе процессы userspace убиваются, заново стартует PID 1 со свежим окружением — без ребута ядра, без BIOS/firmware. Особенно полезно для k8s-нод и серверов, у которых boot занимает минуты.
journalctl — каждый день#
Полезные шорткаты:
# логи юнита с момента старта системы
journalctl -u nginx.service -b
# хвост в реальном времени (как tail -f)
journalctl -u nginx.service -f
# только ошибки за последний час
journalctl -p err --since "1 hour ago"
# логи за конкретный boot
journalctl --list-boots
journalctl -b -1 # предыдущий boot
# логи в JSON (для парсинга)
journalctl -o json -u nginx.servicesystemd-analyze#
Хочешь узнать, что тормозит загрузку:
systemd-analyze blame # сортировка юнитов по времени старта
systemd-analyze critical-chain # критический путь
systemd-analyze security nginx # security score юнита (NoNewPrivileges, ProtectHome и т.д.)Последняя команда отдельно полезна — даёт чек-лист, как ужесточить sandbox любого сервиса.
Итоги#
Знать и работать прям со всеми системами инициализации тебе вряд ли придется, но знать об их наличии я считаю надо. В большинстве систем с которыми приходится работать, обычно используется systemd.
На этом всё! Profit!
Если у тебя есть вопросы, комментарии и/или замечания – заходи в чат , а так же подписывайся на канал .
О способах отблагодарить автора можно почитать на странице “Донаты ”.