Linux etc init d status

Исследуем процесс загрузки Linux

(C) В.А.Костромин, 2007
(версия файла от 5.10.2007 г.)

Этап 7: Скрипт rc и запуск системных сервисов

Как мы видели в предыдущем разделе, скрипт rc.sysinit выполняет те задачи по начальной настройке системы, которые не зависят от уровня выполнения. Скрипт /etc/rc.d/rc, который запускается следующим, должен уже произвести перевод системы на тот уровень выполнения, который задан в файле inittab (или в командной строке). Напомню, что в файле inittab присутствует отдельная строка для каждого уровня выполнения. В этих строках вызывается один и тот же скрипт, и строки отличаются только аргументом вызова этого скрипта. Этот аргумент (или параметр) и задает уровень выполнения. Но, прежде чем рассматривать функции, выполняемые скриптом rc, надо сказать несколько слов о каталоге /etc/rc.d.

7.1. Структура каталога /etc/rc.d/

Этот каталог играет важную роль в процессе загрузки, поскольку он содержит основные скрипты (программы на языке командного процессора shell), служащие для организации процесса загрузки.

Каталог rc.d содержит следующий набор подкаталогов:

Если вы просмотрите (например, с помощью команды ls -l ) содержимое подкаталогов rcZ.d, то увидите, что в этих подкаталогах содержатся не файлы, а только ссылки на файлы скриптов, находящиеся в других каталогах, а именно (за редким исключением), в каталоге /etc/rc.d/init.d. Для примера в листинге 13 приведен перечень файлов каталога rc3.d из системы ASPLinux 11.

Листинг 13. Файл /etc/rc.d/rc системы ASP Linux 11. Часть 1.

Подкаталог init.d содержит уже не ссылки, а скрипты, управляющие работой для тех служб, которые обычно запускаются в системе (NFS, sendmail, cron, syslog, httpd и т. п.).

Рассмотрим, для примера, один из этих скриптов, /etc/init.d/network , который (надеюсь, вы не будете удивлены) управляет запуском сетевых служб.

Если вы запустите его с опцией stop — /etc/init.d/network stop , работа с сетью будет остановлена. Если же выполнить его в следующей форме /etc/init.d/network start сеть будет снова запущена.

Различные скрипты из каталога init.d воспринимают различное число опций (или параметров запуска), но все они понимают опции stop, start и restart. Полный список допустимых опций запуска скрипта можно получить, запустив его на выполнение без аргументов:

Листинг 14. Вывод списка допустимых параметров вызова скрипта.

А можно просто заглянуть в текст скрипта и просмотреть, какие варианты заданы в команде case. В листинге 15 приведен для примера полный текст скрипта /etc/rc.d/init.d/webmin из системы ASP Linux 11. Выбор именно этого скрипта обусловлен только тем, что он имеет относительно маленький объем. Но общие принципы построения таких скриптов он позволяет проиллюстрировать.

Листинг 15. Текст скрипта запуска-останова службы webmin Как видите, в начале этого скрипта задаются значения нескольких переменных (две первых переменных снова просто задают пути к скриптам запуска и останова данной службы), а затем вызывается команда выбора варианта case.

7.2. Скрипт /etc/rc.d/rc

При рассмотрении этого скрипта надо иметь в виду, что в общем случае он предназначен для перевода системы с одного уровня выполнения на другой. В процессе начальной загрузки этот скрипт переводит систему из однопользовательского режима на уровень, задаваемый по умолчанию. Поэтому общий прицип работы этого скрипта заключается в следующем. Вначале он останавливает те службы, которые не нужны на новом уровне выполнения, для чего последовательно (в порядке присвоенных номеров NN) вызывает программы, на которые указывают ссылки с именами вида KNNname из каталога /etc/rc.d/rcZ.d, где Z — номер уровня выполнения (смотри пример из листинга 13). При этом программы вызываются с аргументом stop , т. е. соответствующие службы останавливаются. Затем так же последовательно перебираются ссылки с именами SNNname и соответствующие программы вызываются с параметром start . Из сказанного ясно, что буквы (символы) S и K, с которых начинаются имена ссылок в подкаталогах rcX.d, происходят от start и kill, соответственно. Отметим еще раз, что двузначные номера NN в именах ссылок определяют порядок запуска скриптов в каталоге, а name обычно является именем соответствующей программы (это имя приводится, скорее всего, просто для удобства администрирования, его отсутствие ничего бы не изменило).

Если вы хотите остановить или наоборот запустить какую-то из стандартных системных служб, вы можете сделать это, вызвав соответствющий скрипт, например,
или

Если вы сами установили в систему какую-то программу и хотите, чтобы она всегда запускалась при старте системы, не требуя от вас каких-то дополнительных телодвижений, вы можете создать соответствующий управляющий скрипт (а, может быть, он включен разработчиком в дистрибутив программы), который разместить в стандартном каталоге /etc/rc.d/init.d (в некоторых дистрибутивах это будет /etc/init.d/, хотя в большинстве случаев один из этих каталогов является просто ссылкой на другой). После этого нужно просто создать ссылку вида SNNnewprogram в каталогах /etc/rc.d/rcZ.d для тех уровней выполнения, на которых вы желаете запускать вашу программу. Все это нетрудно проделать «вручную», хотя существуют специальные утилиты, с помощью которых можно легко скорректировать состав служб, запускаемых на разных уровнях. В Red Hat такая утилита называется redhat-config-services, в Debian — rcconf. Существуют и графические варианты таких утилит, например, system-config-services (я пользовался ею в ASP Linux 11). Но, если вы желаете проделать все эти операции вручную, то теперь вы знаете, как это сделать.

Читайте также:  Как установить windows когда не работает дисковод

Одна из последних ссылок вида SXXname (обычно это S99local ), используемых скриптом rc на уровнях 2–5, является ссылка на скрипт /etc/rc.d/rc.local. Как сказано в самом этом файле, этот скрипт выполняется после всех других скриптов в процессе инициализации системы, поэтому если вы хотите, чтобы в процессе загрузки были выполнены какие-то дополнительные команды или ваши персональные настройки, то их целесообразно поместить именно сюда.

В последних версиях дистрибутивов скрипт /etc/rc.d/rc.local либо вообще пуст (хотя еще и сохраняется), либо выполняет очень ограниченные задачи. И некоторые авторы вообще не рекомендуют им пользоваться.

7.3. Системные сервисы (демоны)

Как вы могли видеть из приведенного описания работы скрипта rc, большое значение для результирующей конфигурации системы имеют программы, вызываемые из этого скрипта, размещенные по большей части в каталоге /etc/rc.d/init.d. Я буду называть программы этого класса системными сервисами, поскольку они выполняют в системе служебные функции и во многом определяют функциональность системы.

Можно было бы здесь рассмотреть полный список системных служб, их назначение и вопрос о том, как оптимизировать набор этих служб для вашей системы. Однако это будет уже отклонением от генерального направления данных заметок. Поэтому я ограничусь упоминанием двух статей, в который вы можете найти сооответствющий материал. Одна из них — это моя попытка подступиться в рассмотрению списка системных демонов (см. [44]), в вторая — сделанный мной перевод [45] статьи Len DiMaggio, в котором дано описание большинства системных служб и даны очень полезные ссылки, по которым можно найти дополнительные материалы.

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

Источник

What Is init.d and How To Use For Service Management In Linux

Linux operating systems generally uses boot loader like grub and lilo and than uses init process to start operating system and other services. init is the most important process which forks or creates other process in a Linux system. init.d is init configuration directory which holds information about the services or daemons.

init.d Location

init.d is located under /etc which is configuration directory for most of the Linux distributions. We can chech the existence of the init.d with the file command like below. It is a directory of course.

init.d Location

Init Daemon

init daemon is the first process of Linux system. Then other processes, services, daemons and threats are started by init . So init.d is a configuration database for init process.

Daemon Script

Now we will print an example daemon process. A daemon script will hold functions like start , stop , restart , status etc. We will use cron daemon script in this example.

Daemon Script

List Init.d Contents

There are a lot of different daemon and service scripts in init.d directory. We can list these scripts with the ls command like below.

List Init.d Contents

Init.d Script Usage

We can use these daemon scripts just by calling the like a regular bash script. Lets print some help information by calling script but not providing any option.

and then list the status of the cron daemon which is used for scheduled jobs.

Init.d Script Usage

Источник

Системный интегратор

init.d Скрипты автозапуска при включении, выключении системы.

Скрипты запускаемых служб в Linux Ubuntu располагаются в /etc/init.d

Для того, чтобы скрипт запускался автоматически во время запуска системы, надо создать символическую ссылку на скрипт и разместить её в каталоге /etc/rc.d/rcN.d, где N уровень выполнения скрипта.

Читайте также:  Как посмотреть зависимости windows

Уровень 0

остановка системы (halt) — работа системы должна быть прекращена.

Уровень 1

однопользовательский режим работы — консоль восстановления.

Уровень 2

многопользовательский режим — пользователи могут работать на разных терминалах.

Уровень 3

многопользовательский сетевой режим — осуществляется настройка сети и запускаются сетевые службы.

Уровень 4

практически не используется.

Уровень 5

запуск графической подсистемы X11 — вход в систему осуществляется уже в графическом режиме.

Уровень 6

перезагрузка системы — останавливаются все запущенные программы и производится перезагрузка.

Чаще всего во время загрузки системы используются уровни загрузки 3 или 5.

Имя ссылки в каталоге /etc/rc.d/rcN.d имеет особый смысл, например: если сыылки /etc/rc.d/rcN.d/@K99cpu_t и /etc/rc.d/rcN.d/@S00cpu_t указывают на один и тот же файл /etc/init.d/cpu_t, то скрипт @K99cpu_t будет выполнять в cpu_t блок кода, соответствующий останову системы, а скрипт @S00cpu_t будет выполнять в cpu_t блок кода, соответствующий старту системы, Две цифры в начале имени символической ссылки определяют порядок запуска скриптов в каталоге /etc/rc.d/rcN.d.

Cкрипт запуска должен иметь специальный формат, например такой:

Главное тут в следующем, во первых скрипт должен иметь как минимум 3 возможных ключа запуска, это: start, stop, restart, поскольку именно эти основные команды используются для запуска, останова и перезапуска. Плюс ко всему к этому в самом начале файла пишутся те самые заветные цифры отвечающие за последовательность запуска:

# chkconfig: — 98 02

Где 98 это номер в последовательности запуска, а 02 это номер последовательности останова.

То есть, проще говоря, этот скрипт запуститься 98мым в последовательности очередей, а будет остановлен 2рым.

Итак для того чтоб добавить скрипт и добавить его в автозагрузку надо произвести следующую последовательность действий:

1. Создать исполняемый скрипт по шаблону приведёному выше, заменив исполняемый_файл именем файла который надо запустить.

2. Разместить исполняемый скрипт в /etc/rc.d/init

3. Выполнить команду chkconfig —add исполняемый_скрипт

4. Выполнить команду setup или servicevonf (в зависимости от того работаете вы в графическом режиме или консоли) и выбрать службу, которая будет носить имя исполняемый_скрипт.

Выполнение скрипта при включении/отключении сети

Есть директория /etc/network/ с поддиректориями if-down.d, if-pre-up.d, if-post-down.d, if-up.d. Если разместить скрипт в одной из этих поддиректорий, то он будет выполняться соответственно при выключении, перед включением, после выключения или при включении сети.

Другой способ — указать в файле /etc/network/interfaces одну из следующих директив: up, pre-up, post-up, down, pre-down, post-down. Например, строка

после включения сети выполнит скрипт script.sh. Подробнее можно почитать в man interfaces.

В любом случае на скрипт должны быть установлены права, разрешающие выполнение, иначе он не сможет запуститься.

Источник

Власть над демонами или автозапуск в Linux

Для реализации автозапуска в Linux написано уже немало и на разных языках, но приходится искать, потому постарался свести большую часть тут. Здесь не рассказывается полностью весь процесс с нуля, но предоставлено достаточно информации и ссылок, чтобы сделать атоматический запуск программ в Linux реальностью.

Стоит сразу заметить — чтобы программа была полноценным сервисом/демоном, она должна быть соответствующе написана (link1, link2). Впрочем такое делают не всегда, хотя возможно это и не совсем правильно.

Существуют несколько способов сделать автозапуск программ в Linux:

  • записать вызов программы/скрипта запуска в /etc/rc.local в фоновом режиме (&) (в разных дистрибутивах может лежать в разных местах, например, /etc/rc.d/rc.local) с перенаправленными потоками ввода/вывода в /dev/null. Например, «/home/user/my_prog 1 > /dev/null 2 > /dev/null &». Также, дополнительно, можно воспользоваться командой nohup;
  • внести вызов в /etc/inittab, согласно правилам его оформления. В отличие от первого способа тут можно указать уровень запуска для программы;
  • написать скрипт, позволяющий запускать/останавливать/перезапускать программу как демона, а также получать информацию о её состоянии.

Первый способ самый лёгкий, но и самый проблемный. Файл rc.local есть не во всех дистрибутивах. В нём нельзя задать уровень запуска. Если там записано несколько программ, то сложно ими управлять как сервисами (разве что запустить или остановить все одновременно). И, под конец, запуск из него подрывает устойчивость системы от взлома (примеры можно легко найти в поисковике).

Второй метод довольно экзотичный, сам узнал о нём совсем недавно, хотя пишут, что им пользуются многие администраторы. Тем не менее, используя его, нельзя оперировать запущенными таким способом программами как демонами, что довольно неудобно. Да и загромождать inittab некрасиво.

Последний метод на текущий момент самый «кошерный», но немного сложнее предыдущих (возможно, на первый взгляд). Именно им представлены все системные демоны, что говорит само за себя. Потому его и рассмотрю ниже.

Также есть способ автозапуска графических программ, но его опишу в конце, отдельно от остальных, т.к. он имеет недемоническую сущность.

Сразу обмолвлюсь, что у меня стоит Debian 6 и в других дистрибутивах пути могут несколько различаться.

Читайте также:  Как записать windows ashampoo

Автозапуск программы как демона

Обычно в системе уже есть много подсказок как это сделать, но всё-таки приходится лазить по разным файлам и искать в интеренете дополнительную информацию. Это не значит, что я опишу тут каждую букву, но искать придётся меньше, надеюсь.

Для начала стоит заглянуть в каталог /etc/init.d. Здесь содержатся запускные скрипты всех сервисов, а также два файла для желающих написать себе такой же:

README и skeleton

skeleton содержит в себе болванку скрипта запуска с довольно подробными комментариями, а README его неплохо дополняет, не смотря на его небольшой размер. Также можно посмотреть и другие файлы и попытаться найти там что-то, что прояснит непонятную ситуацию.

В 6-ом debian`е для запускных скриптов демонов используется LSB (Linux Script Base) Init Standart. Почитать о нём подробнее можно тут. Для систем, где LSB не используется стоит взглянуть сюда.

Рассмотрим поближе файл skeleton. Первое с чего он должен начинаться, конечно же «#!/bin/sh», т.к. init-скрипт — запускной файл. Далее идёт комментированный заголовок:

Может показаться, что это просто лишняя информация от автора, но это не так. То, что указано здесь используется при прописывании скрипта в систему. Тут как раз пригодится файл README, который показывает, что в заголовке skeleton перечислены не все возможные параметры. Как минимум есть ещё следующие:

Все параметры и их полное описание (на английском) можно увидеть тут, а на русском тут и тут (спасибо awzrno за новые ссылки ^_^). К русскому варианту добавлю, что в Required-Start: можно прописать $all, тогда текущий скрипт будет запускаться после всех остальных (иногда это бывает нужно). Также X-Interactive: true показывает, что этот скрипт может взаимодействовать с пользователем, запросом на ввод чего-нибудь, например пароля.

Далее в skeleton идёт инициализация переменных, используемых в самом скрипте. Часть из них нужно будет настроить под свои нужды. Потом проверки на то, что сам демон существует и попытка прочитать конфигурационный файл (их имена должны быть указаны в переменных выше), далее загрузка переменных rcS, а потом идёт одна из самых интересных частей init-файла:
. /lib/lsb/init-functions
это определение LSB функций работы с логами, LSB-статусом сервиса, работы с процессом. В некоторых дистрибутивах этот файл может находиться в каталоге /etc/init.d. Названия и часть подробностей можно узнать непосредственно из комментариев к функциям в этом файле, а также тут.

Следующая часть — непосредственно тело скрипта. Тело состоит из условных частей, которые являются командами для демона: start, stop, restart/reload/force-reload, status. Кто-то выделяет их в отдельные функции, кто-то нет. На мой взгляд, функциями они выглядят эстетичнее и код более понятен. Все эти команды объединяет оператор выбора case, который и выбирает для исполнения нужный кусок кода, в зависимости от команды (параметра) с которой был запущен init-скрипт.

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

После того как файл будет готов его нужно скопировать в /etc/init.d и добавить в автозагрузку:
update-rc.d defaults
(или insserv для debian 6 stable и выше)
Удалить из автозагрузки можно так:
update-rc.d -f remove
(или insserv -r для debian 6 stable и выше)

Далее также можно использовать команды sysv-rc-conf в debian или service в fedora core, чтобы включить/выключить автозагрузку сервиса.

Автозапуск графического ПО без ввода паролей

Сама по себе реализация такой возможности понижает уровень защищённости ОС, т.к. войти может любой. Но бывают ситуации, когда это необходимо. Рассмотрю тут варианты только для двух основных графических менеджеров, т.к. других установленных под рукой нет.

Убрать запрос пароля на вход можно в центре управления (kcontrol) -> системное администрирование -> менеджер входа в систему -> удобства. Там выбрать пользователя, под которым входить (кроме рута) и поставить нужные галочки (разрешить автовход и вход без ввода пароля).

Чтобы сделать автозапуск программы нужно в каталог /home/ /.kde/Autostart добавить ссылку на запускной файл/скрипт нужного ПО.

Тут убрать запрос пароля на вход можно также в центре управления (gnome-control-center) -> Login Screen. Там, под рутом (ткнуть на замок, ввести пароль) выбрать пользователя, под которым входить (кроме суперпользователя).

Для автозапуска программы опять же в центре управления выбрать Startup Applications -> Add и заполнить маленькую форму.

Для обоих графических менеджеров:
Если нужно запустить под обычным пользователем, но от рута, то ещё надо настроить правила в /etc/sudoers на запуск конкретной программы/набора программ от имени суперпользователя (манами рекомендуется для безопасности делать это с помощью visudo). Как это делать рассказывать не буду, т.к. в man sudoers всё хорошо расписано.

Источник

Оцените статью