Европейский Университет в Санкт-Петербурге
Опубликован: 04.07.2008 | Доступ: свободный | Студентов: 1076 / 303 | Оценка: 4.30 / 3.78 | Длительность: 18:28:00
Лекция 13:

Управление службами с помощью SMF

< Лекция 12 || Лекция 13: 12 || Лекция 14 >

Взаимосвязь служб

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

Если при запуске службы выясняется, что не работают какие-то другие службы, от которых она зависит, то служба не запускается и переводится в состояние offline. Если ошибки возникают во время запуска службы, она переводится в состояние maintenance.

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

Удовлетворены ли взаимосвязи службы, определяется типом взаимосвязи:

  • require_all – считается удовлетворенной, когда все перечисленные службы запущены (находятся в состояниях online или degraded ) или все указанные файлы присутствуют.
  • require_any – считается удовлетворенной, когда хотя бы одна из перечисленных служб запущена (находится в состояниях online или degraded ) или по крайней мере один из указанных файлов присутствует.
  • optional_all – считается удовлетворенной, когда все перечисленные службы запущены (находятся в состояниях online или degraded ), или не могут быть запущены без вмешательства администратора (т.е. находятся в состояниях disabled, maintenance, offline ), или не существуют.
  • exclude_all – считается удовлетворенной, когда все перечисленные службы запрещено запускать, либо они находятся в состоянии maintenance, либо все указанные службы или файлы отсутствуют.

Взаимосвязи также иногда называют "зависимостями" (от англ. "dependencies").

Каждая служба управляется с помощью службы запуска ( restarter'a – т.е. "пускателя"). У службы может быть своя собственная служба запуска. Кроме этого, есть общая служба запуска – svc.startd. В документации она называется master restarter.

Служба запуска выполняет свои функции, вызывая методы каждой службы, за которую она отвечает. Методы – это обычно скрипты, которым передаются параметры start, stop, refresh и т.п.

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

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

Узнать, от каких служб и файлов зависит служба, какая программа является ее службой запуска, а также изменить описание взаимосвязей можно с помощью команд svcs и svccfg соответственно.

Объявление службы (manifest)

Каждая служба имеет свое объявление ( manifest ) – файл в формате XML, содержащий полное описание всех свойств службы или ее экземпляра. Объявления служб хранятся в каталоге /var/svc/manifest. Эти файлы не следует использовать для изменения свойств служб, так как для этого предназначены команды svccfg и inetadm. Файлы объявлений сами по себе не являются источником информации для служб SMF, так как источником является репозиторий. Для импорта информации из файлов объявлений в репозиторий надо дать команду svccfg import или подождать перезагрузки – при старте системы импорт произойдет автоматически.

Для изучения структуры файлов объявлений имеет смысл прочесть страницу системного руководства по service_bundle(4).

С помощью команды svccfg export можно получить архивный файл в формате XML со всеми свойствами всех служб, за исключением непостоянных свойств типа текущего состояния службы.

Унаследованные сценарии запуска

Унаследованные от прежних версий системы сценарии (скрипты) запуска служб, расположенные в каталогах /etc/rc?.d, запускаются как часть соответствующего этапа работы системы:

Каталог со скриптами Этап
/etc/rcS.d milestone/single-user:default
/etc/rc2.d milestone/multi-user:default
/etc/rc3.d milestone/multi-user-server:default

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

Управление службами на примере настроек сети

Для получения всех запущенных служб следует дать команду

svcs

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

svcs -a

При поиске служб, которые оказались в состоянии maintenance и которым требуется вмешательство администратора для возобновления нормальной работы, следует использовать

svcs -xv

Для изменения состояния службы надо пользоваться svcadm, для изменения настроек служб – svccfg, для получения информации о свойствах служб – svcprop.

Рассмотрим настройку конкретных служб на примере настроек сетевого интерфейса в Solaris.

Как указывалось в "лекции 2" , при настройке сети в Solaris Express можно применять одну из трех схем – классическую, связанную с inetmenu и самую современную, основанную на NWAM (NetWork Auto Magic). Можно ожидать, что после тестирования в дистрибутивах Solaris Express эта функциональность будет интегрирована в Solaris 10 или следующую версию Solaris.

Посмотрим, какие службы связаны с сетью в нашей системе (мы используем Solaris Express, build 79a для этого эксперимента):

svcs | grep network
online февр svc:/network/tnctl:default
online февр svc:/network/loopback:default
online февр svc:/network/physical:nwam
online февр svc:/network/ipsec/ipsecalgs:default
online февр svc:/network/ipsec/policy:default
online февр svc:/milestone/network:default
online февр svc:/network/initial:default
online февр svc:/network/service:default
online февр svc:/network/shares/group:default
online февр svc:/network/shares/group:zfs
online февр svc:/network/routing-setup:default
online февр svc:/network/routing/ndp:default
online февр svc:/network/rpc/bind:default
online февр svc:/network/routing/route:default
online февр svc:/network/inetd:default
online февр svc:/network/smtp:sendmail
online февр svc:/network/ssh:default
online февр svc:/network/rpc/gss:default
online февр svc:/network/rpc/smserver:default
online февр svc:/network/rpc/cde-calendar-manager:default
online февр svc:/network/rpc/cde-ttdbserver:tcp
online февр svc:/network/security/ktkt_warn:default
online февр svc:/network/rpc-100235_1/rpc_ticotsord:default

Мы получили список только тех служб, которые в настоящий момент запущены. Только одна из них имеет отношение к настройкам сетевого интерфейса – svc:/network/physical:nwam.

Изучим свойства этой службы:

svcprop svc:/network/physical:nwam
nwamd/dhcp_wait_time count 60
nwamd/popup_info boolean true
nwamd/popup_query boolean true
nwamd/scan_interval count 120
nwamd/stability astring Unstable
nwamd/use_net_svc boolean true
nwamd/value_authorization astring solaris.smf.value.nwam
general/action_authorization astring solaris.smf.manage.nwam
general/value_authorization astring solaris.smf.manage.nwam
general/enabled boolean true
general/entity_stability astring Unstable
start/exec astring /lib/svc/method/net-nwam\ start
start/timeout_seconds count 600
start/type astring method
stop/exec astring /lib/svc/method/net-nwam\ stop
stop/timeout_seconds count 60
stop/type astring method
...
(вывод сокращен)

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

Предположим, что нам надо перейти от настроек сети с помощью NWAM к классическому методу, т.е. к статическим файлам настроек, описанным в "лекции 3" . Для этого следует запретить службу svc:/network/physical:nwam и разрешить классическую настройку. Прежде всего потребуется выяснить, как называется служба классической настройки:

svcs -a | grep physical
disabled svc:/network/physical:default
online svc:/network/physical:nwam

Теперь запретим запуск nwam и разрешим запуск physical:default (используем сокращенные идентификаторы служб):

svcadm disable nwam
svcadm enable physical:default
svcs -a | grep physical
online svc:/network/physical:default
disabled svc:/network/physical:nwam

Теперь конфигурация сети считывается из файлов конфигурации.

Профили SMF

Хотя администратор Solaris в состоянии сам указать, какие службы следует запускать при старте системы, в помощь ему созданы профили. После установки или обновления системы для того, чтобы определить, какие службы следует запускать по умолчанию, система обращается к профилю generic.xml, который является символической ссылкой на generic_limited_net.xml.

В более старых версиях Solaris 10 (до Solaris 10 update 3 включительно) запускались службы согласно профилю generic_open.xml ( generic.xml указывал на него).

По сути дела профиль – это файл XML, содержащий список служб, разрешенных к запуску. В каталоге /var/svc/profile есть несколько предустановленных профилей:

  • /var/svc/profile/generic_open.xml – службы, стандартные для более ранних версий Solaris 10;
  • /var/svc/profile/generic_limited_net.xml – стандартные службы, как и в generic_open.xml, но с запретом запускать сетевые службы, кроме network/ssh ;
  • /var/svc/profile/ns_*.xml – профиль разрешает запуск служб, имеющих отношение к службе имен;
  • /var/svc/profile/platform_*.xml – профиль служб, связанных с конкретной аппаратной платформой.

Если в каталоге /var/svc/profile при старте системы обнаруживается профиль с именем site.xml, то в качестве списка запускаемых по умолчанию служб используется он. Вы можете создать свой собственный site.xml для компьютеров вашей организации на основе файлов *.xml в этом каталоге.

Резервные копии и снимки настроек SMF

Для каждого экземпляра каждой службы всегда существует несколько снимков его настроек, которые можно использовать для возврата к предыдущим настройкам, если нынешние оказались неверными. Всего определено пять снимков (табл. 13.1):

Таблица 13.1. Снимки настроек экземпляров служб
initial начальная настройка службы, созданная при первом импорте ее описания (манифеста)
last-import последняя из импортированных с помощью svccfg настройка экземпляра службы
running настройка запущенного экземпляра службы
start снимок настроек, созданный при последнем успешном переходе экземпляра службы в состояние online
previous снимок настроек, созданный при последнем возврате к предыдущим настройкам

Для возврата к предыдущим настройкам следует применять команды svccfg (и ее подкоманды – listsnap, selectsnap и revertsnap ), а для того, чтобы измененные настройки вступили в силу – svcadm refresh.

< Лекция 12 || Лекция 13: 12 || Лекция 14 >
Александр Тагильцев
Александр Тагильцев

Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение.