для чего нужна служба init linux

Содержание
  1. Процесс INIT — это движущая сила, которая обеспечивает работу компьютера под управлением Linux
  2. Команда init в Linux с примерами
  3. Стандартные уровни выполнения для распространения на основе Red Hat:
  4. 7. Сценарии инициализации¶
  5. Уровни запуска¶
  6. Процесс загрузки системы¶
  7. Сценарии инициализации¶
  8. Как работает init¶
  9. Что такое уровень запуска?¶
  10. Работа со сценариями инициализации¶
  11. Использование rc-update¶
  12. Что такое rc-update?¶
  13. Добавление и удаление служб¶
  14. Настройка служб¶
  15. Почему нужна дополнительная настройка?¶
  16. Каталог /etc/conf.d¶
  17. Написание сценариев инициализации¶
  18. Мне тоже придется. ¶
  19. Структура¶
  20. Зависимости¶
  21. Порядок запуска¶
  22. Стандартные функции¶
  23. Добавление дополнительных параметров¶
  24. Переменные для настройки служб¶
  25. Кто от этого выиграет?¶
  26. Использование программного уровня (softlevel)¶
  27. Использование загрузочного уровня (bootlevel)¶
  28. Системы инициализации Linux
  29. Системы инициализации Linux
  30. 1. System V Init
  31. 2. OpenRC
  32. 3. Systemd
  33. 4. Runinit
  34. 5. Upstart
  35. Выводы

Процесс INIT — это движущая сила, которая обеспечивает работу компьютера под управлением Linux

Сейчас существует несколько способов реализации процесса «init». Вы можете использовать классическую программу Микеля ван Смаренбурга, которая поставляется с модулем SysVinit, simpleinit Питера Орбака (его можно найти среди модулей приложений util-linux), или простой шелловский скрипт (например, тот, который приведен в этой статье, правда, он обладает гораздо меньшими возможностями, чем любое приложение языка С).
Если Вы настраиваете ограниченную изолированную систему, можно выбрать любое приложение, которое будет использоваться в качестве процесса «init». Некоторые мазохисты, которым не нравится многозадачность, могут даже перенести command.com на Linux и запустить его в качестве процесса «init», хотя Вам никогда не удастся ограничить себя 640 Kb оперативной памяти, пока загружен кернел Linux.
Вне зависимости от того, какую программу Вы выбрали, доступ к ней должен осуществляться по пути /sbin/init, /etc/init или /bin/init, так как именно эти пути жестко скомпиллированы в кернел. Если ни одна из этих программ не может быть найдена и запущена на выполнение, система считается неисправной и кернел порождает шелл администратора системы, пользователя root, чтобы дать возможность исправить ситуацию (таким образом, в качестве процесса «init» используется шелл /bin/sh).
Для достижения максимальной гибкости разработчики кернела предоставили возможность выбирать другой, альтернативный путь для запуска процесса «init». Кернел воспринимает командную строку «init=» именно для этой цели. Параметры кернела могут быть переданы интерактивно во время загрузки, либо можно использовать команду «append=» в файле /etc/lilo.conf. Silo, Milo, Loadlin и другие загрузчики также позволяют передавать некоторые параметры кернелу.

Как Вы уже догадываетесь, простейший путь для получения прав доступа супервизора системы и его администратора на компьютере с ОС Linux — это напечатать строку «init=/bin/sh» в ответ на приглашение загрузчика LILO. Учтите, что это не является «прорехой» в безопасности системы, потому что настоящей угрозой безопасности системы является физический доступ к компьютеру и его системной консоли. Если Вы опасаетесь возможности ввода параметров «init=» в процессе загрузки, то сам загрузчик LILO может предотвратить возможность подобного несанкционированного управления при помощи защиты своим собственным паролем.
Задача процесса Init
Мы уже знаем, что имя «Init» не собственное, а, скорее, нарицательное, и его может использовать почти любая программа. Вопрос лишь в том, чем в самом деле должен заниматься «Init»? Будучи первым (и единственным) процессом, выполняемым кернелом, «Init» должен заботиться о запуске всех остальных процессов в системе, включая различные программы-демоны, используемые операционной системой, а также обеспечивать сеансы связи с текстовыми консолями. «Init» также должен перезапускать некоторые из своих порожденных процессов после завершения их работы. Обычно это касается всех сеансов связи через консоли. Как только Вы отключаетесь от системы, она должна вновь запустить программу getty, чтобы предоставить возможность следующего соединения. Кроме этого, «Init» заботится о мертвых процессах и отделывается от них. В соответствии с понятием процессов в UNIX, процесс не может быть удален из системной таблицы процессов, пока о его смерти не будет сообщено процессу, породившему данный процесс (или другому процессу-предку, в случае, если процесс-родитель больше не существует). В случае, если процесс прекращает работу после системного вызова exit, он остается в состоянии зомби-процесса, пока кто-нибудь не позаботится о нем. «Init», будучи предком любого другого процесса, должен собирать информацию о состоянии завершения каждого усыновленного зомби-процесса. Следует отметить, что грамотно написанная программа должна сама заботиться о всех порожденных собой процессах, зомби появляются только как следствие некорректного поведения программ. Если бы «Init» не собирал все зомби-процессы, то ленивые программисты легко и быстро исчерпали бы все системные ресурсы и компьютер с переполненной системной таблицей процессов просто завис бы.

Читайте также:  промокод для пин ап 995

Последняя задача «Init» — забота об отключении системы. Программа «Init» должна остановить все процессы и размонтировать все файловые системы, когда системный администратор решит, что пришло время выключать компьютер. Программа shutdown не делает ничего, она только сообщает процессу «Init», что все закончено.
Как видно, задача «Init» не так уж трудно выполнима, и простой шелловский скрипт может справиться с большинством из поставленных задач. Вспомним, что любой шелл сам прекрасно заботится о порожденных собой же процессах, так что забота об умерших потомках — не проблема для простого скрипта. Но настоящий «Init» должен заниматься контролем над поведением всей системы и выполнять его достаточно эффективно, надежно и быстро.
Использование /bin/sh в качестве минимального выбора

Как говорилось выше, шелл может использоваться в качестве программы «Init». Использование «голого»шелла (init=/bin/sh) просто открывает сеанс связи системного администратора на абсолютно несконфигурированном компьютере. Эта глава описывает, как скрипт шелла может выполнить все задачи, необходимые для работы системы в минимальной конфигурации. Этот вид упрощенной программы «Init» может использоваться в изолированных системах либо в случаях ограничения системных ресурсов, когда нужно экономить каждый бит памяти. Самым радикальным решением для изолированных систем является прямое использование конкретного приложения в качестве процесса «Init», в результате мы получим закрытую систему (без возможности взаимодействия с ее администратором, что, несомненно, вызовет проблемы), но иногда такая конфигурация удовлетворяет конкретным технологическим требованиям. Типичным примером системы Linux без реальной программы «Init» служит установочный диск с дистрибутивом операционной системы, в ней /sbin/init — это символьная ссылка на программу установки.

Продолжение следует
Алессандро РубиниLinux Journal, issue 55, November 1998, перевод Игоря Греня

Компьютерная газета. Статья была опубликована в номере 49 за 1998 год в рубрике soft :: unix

Источник

Команда init в Linux с примерами

Главное меню » Linux » Команда init в Linux с примерами

Komanda init v Linux s primerami

Уровни выполнения – это состояние init, в котором определена группа процессов, запускаемых при запуске ОС. Процесс, порожденный init для каждого из этих уровней запуска, определяется в файле /etc/inittab. На каждом уровне выполнения определенное количество остановленных или запущенных служб. Условно семь уровней выполнения существуют числами от нуля до шести.

Стандартные уровни выполнения для распространения на основе Red Hat:

Режим Действие Остановка Выключает систему 1 Однопользовательский режим Не настраивает сетевые интерфейсы, не запускает демонов,

или разрешить вход без полномочий root 2 Многопользовательский режим Не настраивает сетевые интерфейсы и не запускает демонов. 3 Многопользовательский режим с подключением к сети Запускает систему нормально. 4 Неопределенный Не используется / определяется пользователем 5 X11 Как уровень запуска 3 + диспетчер отображения (X) 6 Перезагрузить Перезагружает систему

По умолчанию большая часть системы на основе LINUX загружается на уровень выполнения 3 или уровень выполнения 5. В дополнение к стандартным уровням выполнения пользователи могут изменять предустановленные уровни выполнения или даже создавать новые в соответствии с требованиями. Уровни выполнения 2 и 4 используются для определенных пользователем уровней выполнения, а уровни выполнения 0 и 6 используются для остановки и перезагрузки системы.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

7. Сценарии инициализации¶

Уровни запуска¶

Процесс загрузки системы¶

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

Сценарии инициализации¶

Как работает init¶

Теперь init проверяет свой конфигурационный файл, чтобы определить, какой уровень запуска использовать. Для этого из /etc/inittab считывается строка:

Читайте также:  ошибка эта программа требует windows service pack 1 или более позднюю версию

В приведенном примере (который подходит для подавляющего большинства пользователей Calculate) номер уровня запуска — 3. Пользуясь этой информацей, init проверяет, что нужно выполнить для запуска уровня запуска 3. Пример уровней запуска:

Что такое уровень запуска?¶

Как вы заметили, init применяет нумерацию для определения уровня запуска, который надо использовать. Уровень запуска — это то состояние, в котором запускается ваша система; он содержит набор сценариев (сценариев уровня запуска или сценариев инициализации [initscript]), которые следует выполнять при входе и выходе из определенного уровня запуска.

В Calculate определено семь уровней запуска: три служебных и четыре определяемых пользователем. Служебные называются sysinit, shutdown и reboot. Действия, совершаемые ими, в точности соответствуют их названиям: инициализация системы, выключение системы и ее перезагрузка.

Работа со сценариями инициализации¶

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

Наконец, можно просмотреть список служб, требующихся для данной, но отсутствующих в системе. Пример запроса списка служб, необходимых Postfix, но отсутствующих:

Использование rc-update¶

Что такое rc-update?¶

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

Добавление и удаление служб¶

В процессе установки Calculate вы могли добавлять сценарии инициализации в уровень запуска «default». В тот момент вы, возможно, не имели понятия, что такое «default» и зачем он нужен, но теперь вы это знаете. Сценарию rc-update требуется второй аргумент, определяющий действие: add (добавить), del (удалить) или show (показать).

По команде rc-update show выводится список всех доступных сценариев с указанием соответствующих уровней запуска. Пример получения информации о сценариях инициализации:

Настройка служб¶

Почему нужна дополнительная настройка?¶

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

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

Каталог /etc/conf.d¶

Такие файлы настроек содержат одни переменные (наподобие /etc/make.conf), облегчая настройку служб. Это также позволяет нам давать больше информации о переменных (в комментариях).

Написание сценариев инициализации¶

Мне тоже придется. ¶

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

Структура¶

Основная структура сценария инициализации показана ниже.

Зависимости¶

Виртуальная зависимость — это зависимость от функций, предоставляемых службой, но не какой-то единственной службой. Сценарий может зависеть от службы системного журнала, но таких достаточно много (metalogd, syslog-ng, sysklogd и т.п.). Поскольку нельзя нуждаться в каждой из них (ни в одной корректно работающей системе они не запущены все сразу), мы обеспечили предоставление виртуальной зависимости всеми этими службами.

Давайте взглянем на информацию о зависимостях postfix:

Как можно увидеть, postfix:

Порядок запуска¶

Иногда вам нужна не сама служба, а запуск вашей службы до (или после) другой службы, если та присутствует в системе (обратите внимание на условие: это уже не зависимость) и запускается на том же уровне запуска (отметьте условие: это относится только к службам из одинакового уровня запуска). Такую очередность можно указать, используя значения before (до) или after (после).

Например, рассмотрим значения для службы Portmap. Пример функции depend() службы Portmap:

Также можно использовать знак «*», чтобы охватить все службы данного уровня запуска, хотя это не рекомендуется. Пример запуска сценария первым на уровне запуска:

Читайте также:  просмотр фотографий с айфона на компьютере windows

Стандартные функции¶

Синтаксис сценариев инициализации, применяемых в Calculate, основан на оболочке Борна (Bourne Again Shell — bash), поэтому вы можете свободно использовать внутри своих сценариев bash-совместимые конструкции.

Добавление дополнительных параметров¶

Переменные для настройки служб¶

Для поддержки конфигурационного файла в каталоге /etc/conf.d ничего дополнительно делать не нужно: при запуске вашего сценария инициализации автоматически включаются следующие файлы (т.е., переменные из них становятся доступны):

Если ваш инициализационный сценарий предоставляет виртуальную зависимость (например, net ), то также включается файл, соответствующий этой зависимости (например, /etc/conf.d/net ).

4.e. Изменение поведения уровней запуска

Кто от этого выиграет?¶

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

Использование программного уровня (softlevel)¶

Использование загрузочного уровня (bootlevel)¶

Использование загрузочного уровня полностью аналогично использованию программного уровня. Единственная разница состоит в том, что вы определяете второй уровень «boot» вместо «default».

Источник

Системы инициализации 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 используются в вашем дистрибутиве? В списке обозначены не все существующие системы, какую из них нужно добавить в список? Напишите в комментариях!

Источник

Поделиться с друзьями
Adblock
detector