Начальную работу ядра если и приходится как-то планировать, то однократно, при установке или настройке системы. С точки зрения работающей системы ядро загружается, определяет устройства и запускает init единым махом. Оттого трудно судить, насколько старт ядра относится еще к досистемной или уже к системной части процедуры загрузки (вообще-то деление чисто условное).
Процесс init - обычный процесс (даром что с PID=1), но именно он, по сути дела, определяет профиль будущей системы. Утилита init была написана в те времена, когда разработчики различных ветвей UNIX еще и не думали договариваться о совместимости. Поэтому поведение init в системах семейства init в системах семейства BSD (о семействах UNIX рассказано в лекции 5). В современных UNIX встречаются и обе схемы в чистом виде, и особые гибриды, так что рассмотрим каждую подробнее.
Но прежде поясним один термин, который нам пришлось уже использовать ранее. Речь идет о
Чаще всего каждый раздел диска содержит свою
Видимое пользователю дерево каталогов образуется так. Одну из доступных mount (например, mount /dev/hda5 /usr ) содержимое /usr были какие-то файлы и подкаталоги, принадлежащие umount.
Список всех /etc/fstab. Помимо дисковых procfs - остроумное изобретение, позволяющее в виде дерева каталогов представлять структуру процессов UNIX. Некоторые устройства (например, CD-ROM) помечены noauto в знак того, что при старте их монтировать не надо. Запись в fstab служит только напоминанием, какое именно устройство какой
В UNIX существует довольно строгая договоренность относительно того, как должны называться стандартные каталоги системы и для чего их следует использовать. Регулярно выпускается документ, именуемый hier, подробно описывающая основные каталоги и их назначение.
Если кратко пересказывать man hier, картина получается такая. Содержимого каталогов /bin и /sbin должны лежать только самые необходимые пользовательские и системные утилиты, а в /lib - все, что необходимо для работы этих утилит; в /dev UNIX хранит всевозможные файл-дырки, в /boot - все, что необходимо для /tmp кто угодно и когда угодно может - временно - хранить свои файлы. Очень важен каталог /etc, содержащий все настройки системы (включая файлы паролей и настройки программных продуктов). Содержимое этих каталогов занимает, как правило, не очень много места; его удобно копировать на какой-нибудь резервный носитель (на совсем уж черный день).
Каталог /var предназначен для файлов, размер (и количество) которых все время меняется: для системных журналов ( /var/log ), почты ( /var/mail ), очередей (на печать, на выполнение и т. п. - /var/spool ) и многого другого. Каталог /mnt содержит временные mount можно временно отобразить содержимое какой-нибудь /home принято отводить под домашние каталоги пользователей.
Наконец, каталог /usr содержит все то, чего не было в /, и что необходимо для штатной работы системы. Многие каталоги называются так же, как и подкаталоги корневого: /usr/bin, /usr/sbin, /usr/lib и другие; их назначение повторяет назначение их тезок. Содержимое /usr/include используется в процессе разработки, а /usr/share содержит файлы, одинаково пригодные на компьютерах любой архитектуры: подкаталог man содержит страницы помощи, info - info-систему, doc - прочую документацию, locale и задают язык диалога с пользователем (например, русский) и прочие особенности национальной формы представления данных (даты, времени, денежных единиц и т. д.).
Выносить каталоги UNIX в отдельные
Типичное решение. /etc ) происходит, но редко; надежность - самая высокая, в ущерб быстродействию; переполнения происходить не должно. /usr: записи может вообще не быть; надежность - высокая, с учетом быстродействия по чтению. /var: запись происходит постоянно; надежность - не в ущерб скорости записи и чтения; переполнение - штатная ситуация (разбух журнал), система должна продолжать работать. Похожими свойствами обладает и /home, но, поскольку /var заполняет система, а /home - пользователи, смешивать не рекомендуется. Отличие /tmp от /var - в еще более низкой надежности ( неиспользуемые файлы могут исчезать из /tmp ) и в еще более значительном преимуществе от быстродействия. Поэтому /tmp иногда размещают в памяти.
В системах из гнезда
Уровень 0 соответствует
Уровень 1 - специальный, он называется однопользовательским. Данный уровень предоставляет единственному пользователю - root - единственный канал управления системой (как правило, с
Уровень 2, по договоренности, соответствует
Уровень 3 принято задействовать для многопользовательского сетевого режима работы: именно при входе на этот
В Linux часто используется и уровень 5, на котором дополнительно запускаются графические сервисы (обычно графический сервер X11 Window System и служба аутентификации). Можно использовать и другие уровни (4 и 7-9), но для чего они - в точности не определено. В некоторых системах гнезда
Стартовав, init читает файл /etc/inittab. В этом файле, довольно замысловатом по структуре, он находит много информации. Там написано, на какой init однократными или повторяемыми (когда соответствующий процесс завершается, init повторно запускает его). Кроме того, init может ждать завершения процесса или запускать его в фоне, умеет запускать определенные процессы в специфических состояниях системы (можно, например, научить его распознавать любимое Ctrl+Alt+Del и переходить на уровень 6 после нажатия этих клавиш).
Особенности поведения init и структура файла
Итак, сначала init выполняет те строчки из init. В Linux, например, это командный сценарий /etc/rc.d/rc.sysinit. Главная задача rc.sysinit - проверить целостность initrd. Во-первых, это модули, ненужные для загрузки ядра - драйверы внешних устройств, разных
Современные внешние устройства умеют сообщать достаточно данных для автоматического их распознавания (некоторое уникальное для однотипных устройств имя и настройки, выданные им шиной. В Linux такая утилита для шины PCI называется lspci, а в FreeBSD - scanpci ), однако полностью переложить на систему подбор модулей нельзя. Для этого все изготовители аппаратуры должны давать привязку устройств к драйверам всех операционных систем (или даже изготовлять новые драйверы), что невозможно. По-хорошему, каждое внешнее устройство должно полностью соответствовать какому-нибудь опубликованному стандарту: тогда было бы достаточно одного драйвера, а какой-нибудь ярлычок стандарта определял бы уникальное имя устройства. Это совершенно нереально, потому что множество изготовителей аппаратуры (особенно самой дешевой и самой дорогой) зарабатывают именно тем, что скрывают архитектуру продаваемого устройства, дабы не пострадать от конкурентов.
Выполнив rc.sysinit, init выбирает из /etc/rc.d/rc, которому в качестве параметра командной строки передается номер уровня. Именно запуск rc с параметром и записан в init дождаться, пока сценарий завершит работу. Переход на уровень - это выполнение соответствующего уровню набора rc.
Каждый такой сценарий должен распознавать как минимум два параметра командной строки - start и stop. Запущенный с ключом start, stop эту службу останавливает. При установке некоторой службы в систему ее /etc/init.d. Суффиксом .d обычно отмечается каталог (directory) однотипных файлов, каждый из которых используется какой-нибудь определенной программой. (Очень часто в более ранних версиях UNIX вместо .d -каталога использовался один файл, и при добавлении или удалении программного продукта приходилось этот файл автоматически преобразовывать; если к нему уже успевал приложить руку системный администратор, об автоматизме можно было говорить лишь гипотетически). Каталог /etc/init.d в ALT Linux - символьная ссылка на /etc/rc.d/init.d, а в некоторых версиях Linux /etc/init.d не было вовсе, что слегка нарушало единообразие. Иногда от status, диагностику состояния службы, и restart, перезапуск службы (это не всегда просто stop+start ). Перечисленные параметры не играют роли при переходе с одного
В /etc (для Linux - в том же /etc/rc.d ) есть каталоги вида /etc/rc номер_уровня.d, в которых помещены специальным образом поименованные символьные ссылки на K (от KILL ). Если служба должна быть запущена, ссылка на ее S (от Start ). Сначала rc выполнит по очереди (в лексикографическом порядке) все начинающиеся на K сценарии из этого каталога, передавая каждому параметр stop. В некоторых системах стоп-сценарий вызывается, только если его служба действительно была запущена; в этом случае значимо сообщение об ошибке: например, служба успела остановиться сама собой, что нехорошо. Потом - упорядоченно и по очереди - выполняются с параметром start все начинающиеся на S сценарии.
В некоторых системах строгих требований, кроме определенной первой буквы, к именам в /etc/rc?.d/ не предъявляется, но считается хорошим тоном второй и третий символы имени сценария делать двузначным числом, а уж потом добавлять имя сервиса. Тогда, во-первых, строго определится очередность выполнения /var/lock/subsys/ ), такое именование ссылок на
Например, в ALT Linux при входе на уровень 2 (многопользовательский без сети) требуется прекратить использовать сетевые netfs ) и запустить системную службу выполнения действий по расписанию (crond). На уровне 3 (многопользовательском сетевом) обе службы должны быть запущены, а на уровне 0 ( /etc/rc.d/rc0.d, /etc/rc.d/rc2.d и /etc/rc.d/rc3.d помещено по две ссылки на ls -og и egrep, можно почитать в руководствах, а о *grep - еще и в лекции 14; к теме относится, что приведенные ссылки указывают не в /etc/init.d, а в /etc/rc.d/init.d, как это сложилось в Linux):
linux$ /bin/ls -og /etc/rc.d/rc[023].d | egrep ^/|" crond|netfs" /etc/rc.d/rc0.d: lrwxrwxrwx 1 15 Oct 31 16:41 K60crond -> ../init.d/crond lrwxrwxrwx 1 15 Oct 31 16:41 K75netfs -> ../init.d/netfs /etc/rc.d/rc2.d: lrwxrwxrwx 1 15 Oct 31 16:41 K75netfs -> ../init.d/netfs lrwxrwxrwx 1 15 Oct 31 16:41 S40crond -> ../init.d/crond /etc/rc.d/rc3.d: lrwxrwxrwx 1 15 Oct 31 16:41 S25netfs -> ../init.d/netfs lrwxrwxrwx 1 15 Oct 31 16:41 S40crond -> ../init.d/crond
Обратите внимание, что останов служб происходит обычно не в том же порядке, что запуск; логичнее всего предположить, что порядок будет обратным, раз уж сумма чисел при K и S у одинаковых сценариев равна 100, однако бывают ситуации, когда порядок останова следует выстраивать специально.
Если понятие
Первое - соответствие У, поскольку в каждом сценарии сосредоточено все, относящееся только к конкретной службе. Второе - соответствие З, поскольку общие для всех сценариев части, вроде оформления вывода, журнализации запуска и останова и т. п., обычно уже включены в /etc/rc.d/rc или хранятся во включаемом сценарии (в Linux - /etc/rc.d/init.d/functions ), так что на долю разработчика сценария остается только логика запуска, а пользователю-администратору для запуска или останова службы достаточно просто запустить сценарий. Третье - независимость служб на уровне размещения в /etc/init.d файл. Указание запускать или не запускать сервис на том или ином уровне тоже сведено до одной операции - заведения соответствующей ссылки в соответствующем каталоге /etc/rc?.d.
Дождавшись выполнения rc, init переходит к другим записям в init запускает в фоне, а когда какой-нибудь из них завершается, запускает вновь. Так, например, устроен запуск getty на обслуживаемых getty определяет активность на login ; login проверяет входное имя и пароль пользователя и запускает shell, а shell завершается при выходе пользователя из системы. Тогда init замечает, что процесс с указанным PID умер, и перезапускает getty. В качестве параметра getty в
initab запущены и init ничего не остается, как следить за ними. В это время пользователи уже радостно вводят пароль программе login...
Рассмотрим теперь, как ведет себя init в системах семейства BSD. В этих системах нет понятия init работает очень просто: сначала выполняет /etc/rc, после чего разбирает файл /etc/ttys, в котором сказано, на каких getty, а сам файл, как видно, выполняет одну из ролей ttys завершается, init запускает его повторно. Кстати сказать, если вы изменили /etc/ttys (или /etc/inittab ) и хотите, чтобы init прочитал заново настройки, ему, как и большинству демонов UNIX, можно послать сигнал HUP (Hang UP): kill -HUP 1 (конечно, это может сделать только тот, кто имеет право изменять
Несмотря на то что в BSD нет понятия init, запущенный в /etc/rc и не разбирает строки /etc/ttys, не относящиеся к init непосредственно запускает /bin/sh на консоли, если она защищенная, или вдобавок предварительно спрашивает пароль суперпользователя, если она незащищенная. После того как shell завершается, init переходит в
Видимо, когда-то давно ." /etc/rc.conf (см. лекцию 11) (в некоторых системах - /etc/rc.config ) - настройки.
Однако через некоторое время выяснилось, что и rc.config не слишком хорош, потому что перечисленные в нем, иногда безо всякого порядка, все системные настройки (числом более трех сотен) - прямое нарушение У. Порядок строк вида переменная=значение в этом файле сам по себе неважен, да еще средство автоматической настройки в FreeBSD, /stand/sysinstall, дописывает все сделанные с его помощью изменения в конец rc.config. Затем в каталоге /etc появился подкаталог /etc/defaults, в котором хранится в неизменном виде хорошо откомментированный rc.conf и некоторые другие настройки системы. В rc.conf из /etc записываются теперь только различия желаемой конфигурации системы и /etc/defaults/rc.conf, а их, как правило, раз в десять меньше. Итак, всякий сценарий, желающий использовать настройки системы, выполняет сначала команду . /etc/defaults/rc.conf, а затем . /etc/rc.conf.
С вынесением настроек в отдельный файл появилась возможность разбить /etc/rc на несколько сценариев, отвечающих за различные стадии загрузки и различные подсистемы. Некоторые подсистемы при разных вариантах настройки могут быть незадействованы, а значит, их сценарии запускать незачем. Так появились /etc/rc.network (настройка сети и сетевых служб), /etc/rc.firewall (настройки межсетевого экрана), /etc/rc.i386 (настройка параметров, специфичных для i386), /etc/rc.syscons (настройка виртуальных консолей), /etc/rc.diskless (для бездисковых систем) и некоторые другие (в FreeBSD4 - порядка 20 штук). В этих сценариях тоже включаются оба файла rc.conf, так что, если это имеет смысл, их можно запускать отдельно, не из /etc/rc. Например, для перезапуска firewall с консоли можно использовать команду sh /etc/rc.firewall тип.
Эти сценарии вызываются (или не вызываются) из /etc/rc в том порядке, в котором они там встречаются. Предполагается, что все упомянутые в них службы уже установлены в системе, а если они не установлены, то и в rc.conf не включены.
Использовать lpc, управляющей подсистемой печати. Операции, необходимые для останова всей системы (размонтировать сетевые диски, сохранить динамические настройки некоторых служб, остановить штатным способом службы, которые нельзя завершить сигналом и дождаться их полного останова и т. п.), выполняет сценарий /etc/rc.shutdown.
Линейная схема неплохо работает только в случае так называемой базовой системы (core system) - системы, все программные продукты которой известны, оттестированы на совместимость друг с другом и отражены в совместных rc, и процедура начальной загрузки аварийно остановится. Значит, для интерпретации каждого
Сейчас эти различия уже неактуальны: размер однотипных программ растет ), так что сами fsck, проверяющей цельность
Если речь идет о необязательных компонентах - таких как WWW-сервер или какой-нибудь экзотический telserver (talk via telnet), которые тем не менее должны запускаться при старте системы и останавливаться при останове, ничего лучше rc.d, только лежит он, согласно правилам FreeBSD, не в /etc, а в /usr/local/etc. Этот каталог - аналог init.d из init.d из каталогов уровней, а BSD-система запускает их непосредственно из rc.d, все с параметром start при старте системы и с параметром stop при останове.
Требования BSD к start и stop, и его имя должно заканчиваться на .sh. Последнее требование позволяет при установке необязательного сервиса класть в /usr/local/etc/rc.d myservise.sh.sample, который не будет запускаться, пока системный администратор не посмотрит внутрь него и не переименует в myservise.sh. Очередность выполнения сценариев из rc.d при старте FreeBSD4 - лексикографическая, при останове - обратная лексикографическая, поэтому надо быть внимательным при запуске зависящих друг от друга подсистем.
Несмотря на очевидные недостатки "линейной" схемы rc.d требует некоторого размышления, каким именно по порядку он должен идти. В случае необязательных служб этот порядок почти неважен, так как они мало зависят друг от друга. Но если этот
Пришлось ввести новую сущность - заголовок командного сценария. В заголовке указано, как называется сервис, которым этот сценарий управляет, какие сервисы уже должны быть запущены к моменту его запуска и какие должны быть запущены после. Попутно в NetBSD увеличили число распознаваемых rcorder анализирует заголовки всех /etc/rc их и запускает. Если в зависимостях встречаются циклы, это уже ошибка разработчика, и rcorder выдаст соответствующую диагностику.
Схема NetBSD оказалась удачной и в новой ветке FreeBSD - FreeBSD5 - ее скопировали. Количество "линейных" сценариев резко сократилось (из них некоторые остались по соображениям совместимости; скорее всего, их в последующих версиях FreeBSD5 ликвидируют). Появился каталог /etc/rc.d, в котором и лежат rc и rcorder.
Начальную работу ядра если и приходится как-то планировать, то однократно, при установке или настройке системы. С точки зрения работающей системы ядро загружается, определяет устройства и запускает init единым махом. Оттого трудно судить, насколько старт ядра относится еще к досистемной или уже к системной части процедуры загрузки (вообще-то деление чисто условное).
Процесс init - обычный процесс (даром что с PID=1), но именно он, по сути дела, определяет профиль будущей системы. Утилита init была написана в те времена, когда разработчики различных ветвей UNIX еще и не думали договариваться о совместимости. Поэтому поведение init в системах семейства init в системах семейства BSD (о семействах UNIX рассказано в лекции 5). В современных UNIX встречаются и обе схемы в чистом виде, и особые гибриды, так что рассмотрим каждую подробнее.
Но прежде поясним один термин, который нам пришлось уже использовать ранее. Речь идет о
Чаще всего каждый раздел диска содержит свою
Видимое пользователю дерево каталогов образуется так. Одну из доступных mount (например, mount /dev/hda5 /usr ) содержимое /usr были какие-то файлы и подкаталоги, принадлежащие umount.
Список всех /etc/fstab. Помимо дисковых procfs - остроумное изобретение, позволяющее в виде дерева каталогов представлять структуру процессов UNIX. Некоторые устройства (например, CD-ROM) помечены noauto в знак того, что при старте их монтировать не надо. Запись в fstab служит только напоминанием, какое именно устройство какой
В UNIX существует довольно строгая договоренность относительно того, как должны называться стандартные каталоги системы и для чего их следует использовать. Регулярно выпускается документ, именуемый hier, подробно описывающая основные каталоги и их назначение.
Если кратко пересказывать man hier, картина получается такая. Содержимого каталогов /bin и /sbin должны лежать только самые необходимые пользовательские и системные утилиты, а в /lib - все, что необходимо для работы этих утилит; в /dev UNIX хранит всевозможные файл-дырки, в /boot - все, что необходимо для /tmp кто угодно и когда угодно может - временно - хранить свои файлы. Очень важен каталог /etc, содержащий все настройки системы (включая файлы паролей и настройки программных продуктов). Содержимое этих каталогов занимает, как правило, не очень много места; его удобно копировать на какой-нибудь резервный носитель (на совсем уж черный день).
Каталог /var предназначен для файлов, размер (и количество) которых все время меняется: для системных журналов ( /var/log ), почты ( /var/mail ), очередей (на печать, на выполнение и т. п. - /var/spool ) и многого другого. Каталог /mnt содержит временные mount можно временно отобразить содержимое какой-нибудь /home принято отводить под домашние каталоги пользователей.
Наконец, каталог /usr содержит все то, чего не было в /, и что необходимо для штатной работы системы. Многие каталоги называются так же, как и подкаталоги корневого: /usr/bin, /usr/sbin, /usr/lib и другие; их назначение повторяет назначение их тезок. Содержимое /usr/include используется в процессе разработки, а /usr/share содержит файлы, одинаково пригодные на компьютерах любой архитектуры: подкаталог man содержит страницы помощи, info - info-систему, doc - прочую документацию, locale и задают язык диалога с пользователем (например, русский) и прочие особенности национальной формы представления данных (даты, времени, денежных единиц и т. д.).
Выносить каталоги UNIX в отдельные
Типичное решение. /etc ) происходит, но редко; надежность - самая высокая, в ущерб быстродействию; переполнения происходить не должно. /usr: записи может вообще не быть; надежность - высокая, с учетом быстродействия по чтению. /var: запись происходит постоянно; надежность - не в ущерб скорости записи и чтения; переполнение - штатная ситуация (разбух журнал), система должна продолжать работать. Похожими свойствами обладает и /home, но, поскольку /var заполняет система, а /home - пользователи, смешивать не рекомендуется. Отличие /tmp от /var - в еще более низкой надежности ( неиспользуемые файлы могут исчезать из /tmp ) и в еще более значительном преимуществе от быстродействия. Поэтому /tmp иногда размещают в памяти.
В системах из гнезда
Уровень 0 соответствует
Уровень 1 - специальный, он называется однопользовательским. Данный уровень предоставляет единственному пользователю - root - единственный канал управления системой (как правило, с
Уровень 2, по договоренности, соответствует
Уровень 3 принято задействовать для многопользовательского сетевого режима работы: именно при входе на этот
В Linux часто используется и уровень 5, на котором дополнительно запускаются графические сервисы (обычно графический сервер X11 Window System и служба аутентификации). Можно использовать и другие уровни (4 и 7-9), но для чего они - в точности не определено. В некоторых системах гнезда
Стартовав, init читает файл /etc/inittab. В этом файле, довольно замысловатом по структуре, он находит много информации. Там написано, на какой init однократными или повторяемыми (когда соответствующий процесс завершается, init повторно запускает его). Кроме того, init может ждать завершения процесса или запускать его в фоне, умеет запускать определенные процессы в специфических состояниях системы (можно, например, научить его распознавать любимое Ctrl+Alt+Del и переходить на уровень 6 после нажатия этих клавиш).
Особенности поведения init и структура файла
Итак, сначала init выполняет те строчки из init. В Linux, например, это командный сценарий /etc/rc.d/rc.sysinit. Главная задача rc.sysinit - проверить целостность initrd. Во-первых, это модули, ненужные для загрузки ядра - драйверы внешних устройств, разных
Современные внешние устройства умеют сообщать достаточно данных для автоматического их распознавания (некоторое уникальное для однотипных устройств имя и настройки, выданные им шиной. В Linux такая утилита для шины PCI называется lspci, а в FreeBSD - scanpci ), однако полностью переложить на систему подбор модулей нельзя. Для этого все изготовители аппаратуры должны давать привязку устройств к драйверам всех операционных систем (или даже изготовлять новые драйверы), что невозможно. По-хорошему, каждое внешнее устройство должно полностью соответствовать какому-нибудь опубликованному стандарту: тогда было бы достаточно одного драйвера, а какой-нибудь ярлычок стандарта определял бы уникальное имя устройства. Это совершенно нереально, потому что множество изготовителей аппаратуры (особенно самой дешевой и самой дорогой) зарабатывают именно тем, что скрывают архитектуру продаваемого устройства, дабы не пострадать от конкурентов.
Выполнив rc.sysinit, init выбирает из /etc/rc.d/rc, которому в качестве параметра командной строки передается номер уровня. Именно запуск rc с параметром и записан в init дождаться, пока сценарий завершит работу. Переход на уровень - это выполнение соответствующего уровню набора rc.
Каждый такой сценарий должен распознавать как минимум два параметра командной строки - start и stop. Запущенный с ключом start, stop эту службу останавливает. При установке некоторой службы в систему ее /etc/init.d. Суффиксом .d обычно отмечается каталог (directory) однотипных файлов, каждый из которых используется какой-нибудь определенной программой. (Очень часто в более ранних версиях UNIX вместо .d -каталога использовался один файл, и при добавлении или удалении программного продукта приходилось этот файл автоматически преобразовывать; если к нему уже успевал приложить руку системный администратор, об автоматизме можно было говорить лишь гипотетически). Каталог /etc/init.d в ALT Linux - символьная ссылка на /etc/rc.d/init.d, а в некоторых версиях Linux /etc/init.d не было вовсе, что слегка нарушало единообразие. Иногда от status, диагностику состояния службы, и restart, перезапуск службы (это не всегда просто stop+start ). Перечисленные параметры не играют роли при переходе с одного
В /etc (для Linux - в том же /etc/rc.d ) есть каталоги вида /etc/rc номер_уровня.d, в которых помещены специальным образом поименованные символьные ссылки на K (от KILL ). Если служба должна быть запущена, ссылка на ее S (от Start ). Сначала rc выполнит по очереди (в лексикографическом порядке) все начинающиеся на K сценарии из этого каталога, передавая каждому параметр stop. В некоторых системах стоп-сценарий вызывается, только если его служба действительно была запущена; в этом случае значимо сообщение об ошибке: например, служба успела остановиться сама собой, что нехорошо. Потом - упорядоченно и по очереди - выполняются с параметром start все начинающиеся на S сценарии.
В некоторых системах строгих требований, кроме определенной первой буквы, к именам в /etc/rc?.d/ не предъявляется, но считается хорошим тоном второй и третий символы имени сценария делать двузначным числом, а уж потом добавлять имя сервиса. Тогда, во-первых, строго определится очередность выполнения /var/lock/subsys/ ), такое именование ссылок на
Например, в ALT Linux при входе на уровень 2 (многопользовательский без сети) требуется прекратить использовать сетевые netfs ) и запустить системную службу выполнения действий по расписанию (crond). На уровне 3 (многопользовательском сетевом) обе службы должны быть запущены, а на уровне 0 ( /etc/rc.d/rc0.d, /etc/rc.d/rc2.d и /etc/rc.d/rc3.d помещено по две ссылки на ls -og и egrep, можно почитать в руководствах, а о *grep - еще и в лекции 14; к теме относится, что приведенные ссылки указывают не в /etc/init.d, а в /etc/rc.d/init.d, как это сложилось в Linux):
linux$ /bin/ls -og /etc/rc.d/rc[023].d | egrep ^/|" crond|netfs" /etc/rc.d/rc0.d: lrwxrwxrwx 1 15 Oct 31 16:41 K60crond -> ../init.d/crond lrwxrwxrwx 1 15 Oct 31 16:41 K75netfs -> ../init.d/netfs /etc/rc.d/rc2.d: lrwxrwxrwx 1 15 Oct 31 16:41 K75netfs -> ../init.d/netfs lrwxrwxrwx 1 15 Oct 31 16:41 S40crond -> ../init.d/crond /etc/rc.d/rc3.d: lrwxrwxrwx 1 15 Oct 31 16:41 S25netfs -> ../init.d/netfs lrwxrwxrwx 1 15 Oct 31 16:41 S40crond -> ../init.d/crond
Обратите внимание, что останов служб происходит обычно не в том же порядке, что запуск; логичнее всего предположить, что порядок будет обратным, раз уж сумма чисел при K и S у одинаковых сценариев равна 100, однако бывают ситуации, когда порядок останова следует выстраивать специально.
Если понятие
Первое - соответствие У, поскольку в каждом сценарии сосредоточено все, относящееся только к конкретной службе. Второе - соответствие З, поскольку общие для всех сценариев части, вроде оформления вывода, журнализации запуска и останова и т. п., обычно уже включены в /etc/rc.d/rc или хранятся во включаемом сценарии (в Linux - /etc/rc.d/init.d/functions ), так что на долю разработчика сценария остается только логика запуска, а пользователю-администратору для запуска или останова службы достаточно просто запустить сценарий. Третье - независимость служб на уровне размещения в /etc/init.d файл. Указание запускать или не запускать сервис на том или ином уровне тоже сведено до одной операции - заведения соответствующей ссылки в соответствующем каталоге /etc/rc?.d.
Дождавшись выполнения rc, init переходит к другим записям в init запускает в фоне, а когда какой-нибудь из них завершается, запускает вновь. Так, например, устроен запуск getty на обслуживаемых getty определяет активность на login ; login проверяет входное имя и пароль пользователя и запускает shell, а shell завершается при выходе пользователя из системы. Тогда init замечает, что процесс с указанным PID умер, и перезапускает getty. В качестве параметра getty в
initab запущены и init ничего не остается, как следить за ними. В это время пользователи уже радостно вводят пароль программе login...
Рассмотрим теперь, как ведет себя init в системах семейства BSD. В этих системах нет понятия init работает очень просто: сначала выполняет /etc/rc, после чего разбирает файл /etc/ttys, в котором сказано, на каких getty, а сам файл, как видно, выполняет одну из ролей ttys завершается, init запускает его повторно. Кстати сказать, если вы изменили /etc/ttys (или /etc/inittab ) и хотите, чтобы init прочитал заново настройки, ему, как и большинству демонов UNIX, можно послать сигнал HUP (Hang UP): kill -HUP 1 (конечно, это может сделать только тот, кто имеет право изменять
Несмотря на то что в BSD нет понятия init, запущенный в /etc/rc и не разбирает строки /etc/ttys, не относящиеся к init непосредственно запускает /bin/sh на консоли, если она защищенная, или вдобавок предварительно спрашивает пароль суперпользователя, если она незащищенная. После того как shell завершается, init переходит в
Видимо, когда-то давно ." /etc/rc.conf (см. лекцию 11) (в некоторых системах - /etc/rc.config ) - настройки.
Однако через некоторое время выяснилось, что и rc.config не слишком хорош, потому что перечисленные в нем, иногда безо всякого порядка, все системные настройки (числом более трех сотен) - прямое нарушение У. Порядок строк вида переменная=значение в этом файле сам по себе неважен, да еще средство автоматической настройки в FreeBSD, /stand/sysinstall, дописывает все сделанные с его помощью изменения в конец rc.config. Затем в каталоге /etc появился подкаталог /etc/defaults, в котором хранится в неизменном виде хорошо откомментированный rc.conf и некоторые другие настройки системы. В rc.conf из /etc записываются теперь только различия желаемой конфигурации системы и /etc/defaults/rc.conf, а их, как правило, раз в десять меньше. Итак, всякий сценарий, желающий использовать настройки системы, выполняет сначала команду . /etc/defaults/rc.conf, а затем . /etc/rc.conf.
С вынесением настроек в отдельный файл появилась возможность разбить /etc/rc на несколько сценариев, отвечающих за различные стадии загрузки и различные подсистемы. Некоторые подсистемы при разных вариантах настройки могут быть незадействованы, а значит, их сценарии запускать незачем. Так появились /etc/rc.network (настройка сети и сетевых служб), /etc/rc.firewall (настройки межсетевого экрана), /etc/rc.i386 (настройка параметров, специфичных для i386), /etc/rc.syscons (настройка виртуальных консолей), /etc/rc.diskless (для бездисковых систем) и некоторые другие (в FreeBSD4 - порядка 20 штук). В этих сценариях тоже включаются оба файла rc.conf, так что, если это имеет смысл, их можно запускать отдельно, не из /etc/rc. Например, для перезапуска firewall с консоли можно использовать команду sh /etc/rc.firewall тип.
Эти сценарии вызываются (или не вызываются) из /etc/rc в том порядке, в котором они там встречаются. Предполагается, что все упомянутые в них службы уже установлены в системе, а если они не установлены, то и в rc.conf не включены.
Использовать lpc, управляющей подсистемой печати. Операции, необходимые для останова всей системы (размонтировать сетевые диски, сохранить динамические настройки некоторых служб, остановить штатным способом службы, которые нельзя завершить сигналом и дождаться их полного останова и т. п.), выполняет сценарий /etc/rc.shutdown.
Линейная схема неплохо работает только в случае так называемой базовой системы (core system) - системы, все программные продукты которой известны, оттестированы на совместимость друг с другом и отражены в совместных rc, и процедура начальной загрузки аварийно остановится. Значит, для интерпретации каждого
Сейчас эти различия уже неактуальны: размер однотипных программ растет ), так что сами fsck, проверяющей цельность
Если речь идет о необязательных компонентах - таких как WWW-сервер или какой-нибудь экзотический telserver (talk via telnet), которые тем не менее должны запускаться при старте системы и останавливаться при останове, ничего лучше rc.d, только лежит он, согласно правилам FreeBSD, не в /etc, а в /usr/local/etc. Этот каталог - аналог init.d из init.d из каталогов уровней, а BSD-система запускает их непосредственно из rc.d, все с параметром start при старте системы и с параметром stop при останове.
Требования BSD к start и stop, и его имя должно заканчиваться на .sh. Последнее требование позволяет при установке необязательного сервиса класть в /usr/local/etc/rc.d myservise.sh.sample, который не будет запускаться, пока системный администратор не посмотрит внутрь него и не переименует в myservise.sh. Очередность выполнения сценариев из rc.d при старте FreeBSD4 - лексикографическая, при останове - обратная лексикографическая, поэтому надо быть внимательным при запуске зависящих друг от друга подсистем.
Несмотря на очевидные недостатки "линейной" схемы rc.d требует некоторого размышления, каким именно по порядку он должен идти. В случае необязательных служб этот порядок почти неважен, так как они мало зависят друг от друга. Но если этот
Пришлось ввести новую сущность - заголовок командного сценария. В заголовке указано, как называется сервис, которым этот сценарий управляет, какие сервисы уже должны быть запущены к моменту его запуска и какие должны быть запущены после. Попутно в NetBSD увеличили число распознаваемых rcorder анализирует заголовки всех /etc/rc их и запускает. Если в зависимостях встречаются циклы, это уже ошибка разработчика, и rcorder выдаст соответствующую диагностику.
Схема NetBSD оказалась удачной и в новой ветке FreeBSD - FreeBSD5 - ее скопировали. Количество "линейных" сценариев резко сократилось (из них некоторые остались по соображениям совместимости; скорее всего, их в последующих версиях FreeBSD5 ликвидируют). Появился каталог /etc/rc.d, в котором и лежат rc и rcorder.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.