Система Init:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
Процессы, протекающие в период от запуска ядра до запроса данных для входа в систему. После запуска ядро временно может обратиться к корневому разделу лишь в режиме «ТОЛЬКО для чтения». В первую очередь ядро запускает программу /sbin/init. В дальнейшем программа init отвечает за базовую конфигурацию системы (подключение файловых систем) и запуск многочисленных сетевых служб и демонов. Как это часто случается в мире Linux, одновременно существует не один, а несколько вариантов системы Init. В настоящее время наиболее распространены классическая система lnit-V, Upstart и Systemd. В классической системе Init-V за инициализацию компьютеров отвечает множество сценариев, связанных между собой ссылками. Сама концепция и название системы восходят к системе V, применявшейся в операционной системе UNIX. В некоторых дистрибутивах система Init-V используется по умолчанию. В более ранних дистрибутивах система Init-V встречается чаще. Но все современные дистрибутивы по-прежнему совместимы с Init-V. Поэтому вам не помешает на базовом уровне ознакомиться с этой системой. Upstart - это событий-но ориентированный вариант системы Init. В Ubuntu он применяется в версии 6 и выше, а также присутствует в Fedora в версиях с 9 по 13, RHEL6. Systemd - самая современная из существующих Init-систем, которая впервые стала применяться в Fedora 15. Почти все дистрибутивы перешли на systemd |
Init-V
1 2 3 4 5 6 7 8 9 10 |
Чтобы при чтении не запутаться в многочисленных деталях, рассмотрим сначала обычный запуск Linux с применением системы Init-V 1. GRUB загружает и запускает ядро. 2. Ядро запускает программу /sbin/init. 3. Программа init конфигурационный файл /etc/inittab. 4. Программа init выполняет сценарий для инициализации системы. 5. Программа init выполняет сценарии /etc/rc.d/rc или /etc/init.d/rc. Сценарий rc во многом различен в разных дистрибутивах. Он нужен для запуска файлов сценариев, находящихся в каталоге /etc/rcN.d или /etc/init.d/rc/7.d (N в данном случае — уровень запуска, ). Кроме того, гс активизирует в большинстве дистрибутивов и графический индикатор загрузки, который показывает, насколько выполнен процесс Init-V. 6. Файлы сценариев из /etc/rcNd или /etc/init.d/rcN.d запускают различные системные службы, в частности те, которые отвечают за выполнение сетевых функций. |
Уровень запуска:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Сначала ядро запускает программу/sbin/init. При этом сообщаются вес параметры загрузки ядра, которые еще не были интерпретированы (то есть все те параметры которые ядро не знает и, соответственно, не может самостоятельно обработать). В результате этого Linux можно, например, запустить в одно пользовательском режиме (подробности сообщаются на странице man init). Иными словами, init -это первый работающий процесс. Все остальные процессы запускаются либо процессом init непосредственно, либо его под процессами (если вы выполните pstree, то сразу поймете, какую доминирующую роль играет процесс init). При остановке компьютера процесс init последним завершает работу, обеспечивая правильное завершение всех остальных процессов. Уровни запуска в Fedora, Red Hat, SUSE: 0 — остановка работы компьютера с выключением; 1 и S — одно пользовательский режим; 2 — многопользовательский режим без выхода в сеть и без NFS; 3 — многопользовательский режим с выходом в сеть, по без автоматического запуска X; 4 — обычно не применяется; 5 — многопользовательский режим с выходом в сеть и запуском системы X; установлен по умолчанию; 6 — остановка работы компьютера с перезагрузкой. Уровни запуска в Debian и Ubuntu: S — инициализация компьютера непосредственно после запуска; 0 — остановка работы компьютера с выключением; 1 — одно пользовательский режим с доступом к сети; 2-5 - многопользовательский режим с доступом к сети и автоматическим запуском X; 6 — остановка работы компьютера с перезагрузкой. |
Инициализация системы:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Еще до того как запустятся либо завершат работу описанные далее файлы rc и runlevel-специфнчные службы, то сеть сразу после запуска компьютера, выполняется инициализация системы (строка si: в inittab). Название сценария зависит от дистрибутива: Debian, Ubuntu до версии 6.06 — /etc/init.d/rcS; RHEL5, Fedora до версии 8 - /etc/rc.d/rc.sysinit; openSUSE до версии 11.4 - /etc/init.d/boot. В ходе инициализации системы решаются задачи, которые требуется выполнить только один раз, в начале сеанса работы с компьютером: инициализация различных системных переменных (в том числе хост-имен и доменных имен); активизация файловой системы /proc; настройка даты и времени; настройка раскладки клавиатуры для текстовой консоли; запуск системы udev; активизация RAID пли LVM; перепроверка файловых систем; подключение корневого раздела заново, в режиме «для чтения и внесения изменений"; проверка файловой системы следующего раздела, подключение разделов; частичная (Fedora) или полная (Debian. Ubuntu) инициализация основных сетевых функций. Обратите внимание — не все описанные здесь функции напрямую выполняются сценарном инициализации системы. Частично считываются и другие сценарные файлы. При этом их названия обычно записываются в форме . имя (поставив точку, мы гарантируем, что находящийся в этом месте файл будет прочтен и выполнен; затем продолжится выполнение сценария). В Debian и Ubuntu присутствует миниатюрный сценарий rcS, выполняющий все сценарные файлы /etc/rcS.d/S*. |
Сценарии Init-V для активации уровней запуска:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
После инициализации системы активизируется стандартный уровень запуска в соответствии с /etc/inittab. Для всех действий, связанных с уровнем запуска, существуют собственные сценарные файлы. В зависимости от дистрибутива они могут находиться в каталоге /etc/init.d или /etc/rc.d/init.d. Чтобы достичь большей совместимости между дистрибутивами, лучше указывать оба пути в виде ссылок. Для запуска сценария Inil-V программа init выполняет сценарий /etc/rc.d/rc или /etc/*nit.d/rc. Сценарию rc предается желаемый уровень запуска N. Сначала rc выполняет некоторые операции, нужные для инициализации. После этого выполняются все сценарные файлы rcn.d/K*. необходимые для завершения процессов. Наконец, выполняются все файлы rcn.d/S*, требуемые для активации новых процессов на том или ином уровне запуска. Значительное достоинстве этой малопонятной системы заключается в том, что вы можете с легкостью интегрировать новые системные процессы в процесс Init-V. Нужно просто скопировать сценарии гс для запуска и остановки процессов в правильные каталоги — именно это происходит при установке пакета, содержащего дополнительный демон. cd /etc/rc.d ls rcS.d/ rc2.d/ rc6.d/ Если быть точным, и каталогах rcN.d находятся не сами сценарные файлы, а только ссылки на них. Преимущество этого метола заключается в том, что каждый сценарный файл можно использовать для нескольких уровней запуска и централизованно изменять. Сами сценарные файлы сохраняются и каталоге /etc/rc.d/init.d или /etc/init.d cd /etc ls -l rc2.d/S20cups |
Система именования
1 2 3 4 5 6 7 8 9 |
Названия ссылок не произвольны, хотя на первый взгляд может сложиться такое впечатление. Начальная буква указывает, запускает сценарии процесс (S-start) или завершает его (K=kill). Ссылки S и К указывают на одни и те же фаpы, но в зависимости от начальной буквы rc выполняет сценарий или с параметром start, или с параметром stop. Указанный далее номер определяет очередность, в которой выполняются сценарные файлы. Например, для запуска большинства сетевых демонов требуется, чтобы сетевое соединение уже было налажено, после чего они запускаются сценарием network. На практике вам достаточно редко придется вводить вручную вышеуказанные команды ln или rm. В большинстве дистрибутивов имеются специальные команды, избавляющие вас от этой работы, например insserv в Debian 6 и выше, а также в SUSE, chkconfig в RHEL5 и старых версиях Fedora и Maneiriva или update-rc.d в старых версиях Debian и Ubiintu. |
Как вручную запускать и останавливать демоны:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Сценарные файлы уровней запуска можно выполнять и вручную. Например, следующая команда останавливает работ)' веб-сервера Apache: /etc/init.d/samba stop service samba start Параметры Init-V-Script В большинстве сценариев могут быть переданы следующие нараметры: start — запускает указанную функцию; stop — останавливает функцию; status — показывает информацию, активна функция или нет; reload — используется, когда измененные конфигурационные файлы; нужно заново прочитать без полной остановки демона при этом; restart — по сравнению предыдущим параметром полностью останавливает демона и запускает его заново. Установленные связи с клиентом при этом теряются. Но многих демонах параметры reload и restart не предусмотрены. В этом случае нужно завершать скрипт с помощью stop и затем запускать, используя start. |
Systemd
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
Systcmd — это новая система Init, разработанная сотрудником Red Hat Леннартом Поттерингом и впервые примененная в Fedora 15. К использованию Systemd перешел и дистрибутив openSUSH. начиная с версии 12.1. В Debian версии 7 также присутствуют пакеты с Systemd, но по умолчанию Debian 7 продолжает использовать процесс Init-V. В Debian GNU/Linux версии 8 и выше используется systemd по умолчанию Пожалуй, важнейшее отличие между традиционной системой Init-V и Systemd заключается в том, что за конфигурацию новой системы отвечают не оболочковые сценарии, а обычные текстовые файлы. Сам Systemd является скомпилированной программой и поэтому работает значительно быстрее своих аналогов. (В ходе обычного старта с применением Init-V запускается множество экземпляров оболочки — а на это, конечно же, уходит масел времени n ресурсов.) В дальнейшем Systemd запускает службы параллельно, что особенно удобно при работе на многоядерных системах. ----------------------------------- systemctl list-units -t service --all - вывести все сервисы systemctl list-unit-files --type service – отображает все сервисы и проверяет, какие из них активированы systemctl list-units -t service - вывести на экран активные сервисы и их состояние ----------------------------------- systemctl status firewalld - проверим, запущен ли firewalld systemctl status rsyslog - посмотреть статус rsyslog systemctl status mysql - проверить состояние сервиса mysql ----------------------------------- systemctl start httpd - запустить httpd systemctl start mysql - запустить сервис mysql ----------------------------------- systemctl stop mysql - остановить сервис mysql systemctl reload httpd - перезагружаем веб сервер systemctl reload mysql - перезагрузить конфигурацию сервиса mysql ----------------------------------- systemctl restart mysql - перезагрузить сервис mysql systemctl restart squid - перезагрузить сервис squid ----------------------------------- systemctl try-restart mysql - перезагрузить сервис mysql, если она запущен ----------------------------------- systemctl kill mysql - убить службу ----------------------------------- systemctl enable mysql - добавить в авто запуск mysql systemctl enable httpd - добавить в авто запуск httpd systemctl enable mariadb - добавить в авто запуск mariadb systemctl enable squid - добавить в авто запуск squid ----------------------------------- systemctl disable mysql - убрать из авто запуска mysql ----------------------------------- systemctl mask name.service – заменяет файл сервиса симлинком на /dev/null, делая юнит недоступным для systemd systemctl unmask name.service – возвращает файл сервиса, делая юнит доступным для systemd ----------------------------------- systemctl halt – останавливает систему systemctl poweroff – выключает систему systemctl reboot – перезагружает систему ----------------------------------- |