Основная роль системы инициализации (init) заключается в запуске и остановке критически важных процессов. В Linux существует три основные реализации init: System V, Upstart и systemd. Этот урок посвящен самой традиционной версии — System V init, которую часто называют SysV или просто systemv (произносится «Систем Файв»).
Чтобы определить, использует ли ваша система реализацию systemv, проверьте наличие файла /etc/inittab. Если этот файл существует, вы, скорее всего, используете дистрибутив на базе SysV.
Как System V управляет процессами
Процесс systemv init запускает и останавливает службы последовательно. Например, если служба с именем foo-b зависит от foo-a, foo-b не может запуститься, пока foo-a полностью не заработает. Система initv достигает этого с помощью сценариев оболочки (shell scripts). Эти сценарии, расположенные в определенных каталогах, отвечают за запуск и остановку служб. Хотя вы можете писать собственные сценарии, большинство систем полагаются на предустановленные, которые управляют основными службами ОС.
Преимущества и недостатки
Основное преимущество этого последовательного подхода — его простота и предсказуемость. Устранение неполадок с зависимостями прямолинейно, поскольку вы знаете, что foo-a всегда запускается перед foo-b. Однако главный недостаток модели init v — это производительность, поскольку службы обычно запускаются по одной, что приводит к более длительному времени загрузки по сравнению с современными параллельными системами.
Понимание уровней выполнения (Runlevels) в System V
В среде systemv состояние машины определяется уровнями выполнения (runlevels), пронумерованными от 0 до 6. Эти режимы могут немного различаться в разных дистрибутивах Linux, но, как правило, они следуют этому стандартному соглашению:
- 0: Выключение (Shutdown)
- 1: Режим одного пользователя (Single User Mode)
- 2: Многопользовательский режим без сети
- 3: Многопользовательский режим с сетью
- 4: Не используется
- 5: Многопользовательский режим с сетью и графическим интерфейсом (GUI)
- 6: Перезагрузка (Reboot)
Сценарии и каталоги Init
При загрузке системы она проверяет настроенный уровень выполнения и выполняет соответствующие сценарии. Эти сценарии обычно находятся в каталогах, таких как /etc/rc.d/rc[runlevel].d/ или в центральном каталоге /etc/init.d. Сценарии, начинающиеся с S (Start — Запуск), выполняются при запуске, а те, что начинаются с K (Kill — Остановка), выполняются при выключении. Числа, следующие за S или K, определяют порядок выполнения.
Например:
pete@icebox:/etc/rc.d/rc0.d$ ls
K10updates K80openvpn
В этом примере при переключении на уровень выполнения 0 (выключение) сначала будет выполнен сценарий для остановки службы обновлений, а затем сценарий для OpenVPN. Вы можете найти уровень выполнения по умолчанию для вашей машины в файле /etc/inittab, где вы также можете его изменить.
Важно отметить, что System V был в значительной степени заменен systemd в большинстве современных дистрибутивов Linux. Тем не менее, вы все еще можете столкнуться с концепцией уровней выполнения в новых системах init, поскольку они часто предоставляют уровень совместимости для поддержки устаревших служб, которые полагаются на сценарии systemv init.