Документация Calculate Linux

Вид материалаДокументы

Содержание


Настройка служб
Каталог /etc/conf.d
Написание сценариев инициализации
Порядок запуска
Стандартные функции
Добавление дополнительных параметров
Переменные для настройки служб
Кто от этого выиграет?
Использование программного уровня (softlevel)
Использование загрузочного уровня (bootlevel)
Подобный материал:
1   ...   7   8   9   10   11   12   13   14   ...   136

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

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


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

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

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


В Calculate предусмотрен очень простой способ настройки служб: для каждого сценария, предполагающего настройку, в каталоге /etc/conf.dесть конфигурационный файл. Например, у сценария, запускающего apache2 (под названием /etc/init.d/apache2) есть конфигурационный файл /etc/conf.d/apache2, где могут храниться нужные вам параметры, передаваемые серверу Apache 2 при запуске. Пример переменной, определенной в /etc/conf.d/apache2:

APACHE2_OPTS="-D PHP4"

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

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

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


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

Структура


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

#!/sbin/runscript


depend() {

(информация о зависимостях)

}


start() {

(команды, необходимые для запуска службы)

}


stop() {

(команды, необходимые для остановки службы)

}


restart() {

(команды, необходимые для перезапуска службы)

}

В любом сценарии должна быть определена функция start(). Все остальные разделы необязательны.

Зависимости


Можно определять два типа зависимостей: use (использую) и need (нуждаюсь). Как упоминалось ранее, need-зависимость более строга, чемuse-зависимость. Вслед за типом зависимости указывается название службы, от которой существует зависимость, или ссылка на виртуальную(virtual) зависимость.

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

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

depend() {

need net

use logger dns

provide mta

}

Как можно увидеть, postfix:
  • требует сеть (net): виртуальная зависимость, удовлетворяемая, например, /etc/init.d/net.eth0
  • использует журнал (logger): виртуальная зависимость, удовлетворяемая, например, /etc/init.d/syslog-ng
  • использует службу имен (dns): виртуальная зависимость, удовлетворяемая, например, /etc/init.d/named)
  • предоставляет почтовый агент (mta): виртуальная зависимость, общая для всех программ — почтовых серверов

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


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

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

depend() {

need net

before inetd

before xinetd

}

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

depend() {

before *

}

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


Следом за разделом depend() вам потребуется определить функцию start(). В ней содержатся все команды, необходимые для запуска вашей службы. Рекомендуется применять функции ebegin и eend для сообщений пользователю о том, что происходит. Пример функции start():

start() {

ebegin "Запуск - моя_служба"

start-stop-daemon --start --quiet --exec /path/to/my_service

eend $?

}

Если вам нужны дополнительные примеры функции start(), пожалуйста, прочитайте исходные коды сценариев инициализации, находящихся в каталоге /etc/init.d. Что касается команды start-stop-daemon, то на случай, если вам нужны дополнительные сведения, есть превосходная страница справки. Пример вызова страницы справки по start-stop-daemon:

man start-stop-daemon

Другими функциями, которые можно определить — stop() и restart(). От вас не требуется определение этих функций! Система инициализации, применяемая нами, достаточно развита и в состоянии самостоятельно заполнить эти функции, если вы используете start-stop-daemon.

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

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


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

opts="${opts} restartdelay"


restartdelay() {

stop

sleep 3 # пауза в 3 секунды перед повторным запуском

start

}

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


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

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

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

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


Большинству пользователей ноутбуков знакома ситуация: дома вам нужен запуск net.eth0, и наоборот, в дороге запуск net.eth0 не нужен (так как сеть недоступна). В Calculate можно изменять поведение уровней запуска по своему усмотрению.

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

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


Прежде всего, создайте каталог для своего второго уровня запуска «по умолчанию». Например, создадим уровень запуска offline. Пример создания каталога уровня запуска:

mkdir /etc/runlevels/offline

Добавьте необходимые сценарии инициализации в только что созданный уровень запуска. Например, чтобы получить точную копию уровняdefault, за исключением net.eth0:

(копирование всех служб с уровня default в уровень offline)

# cd /etc/runlevels/default

# for service in *; do rc-update add $service offline; done

(удаление ненужных сценариев с уровня offline)

# rc-update del net.eth0 offline

(просмотр сценариев, запускаемых на уровне offline)

# rc-update show offline

(часть выведенного списка)

acpid | offline

domainname | offline

local | offline

net.eth0 |

Теперь необходимо отредактировать конфигурацию загрузчика, добавив запись об уровне offline. Например, в файле/boot/grub/grub.conf. Пример:

title Автономное использование Calculate Linux

root (hd0,0)

kernel /boot/vmlinuz-5bf7e746 root=/dev/hda3 softlevel=offline

Вуаля, все готово. Теперь, если при загрузке вы выберете вновь созданную запись, то вместо default будет использоваться уровень offline.

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


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