Solaris SMF: различия между версиями
Sirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
(не показано 12 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
+ | [[Категория:Solaris]] |
||
=SMF= |
=SMF= |
||
Этот документ является компиляцией из нескольких источников. |
Этот документ является компиляцией из нескольких источников. |
||
Строка 56: | Строка 57: | ||
Просмотр служб, находящихся в состоянии maintenance, выполняется командой |
Просмотр служб, находящихся в состоянии maintenance, выполняется командой |
||
{{Root|<nowiki> |
{{Root|<nowiki> |
||
− | svcs –xv |
+ | svcs –xv |
</nowiki>}} |
</nowiki>}} |
||
Строка 81: | Строка 82: | ||
* скачиваю пакет и зависимости с http://www.sunfreeware.com/programlistintel10.html |
* скачиваю пакет и зависимости с http://www.sunfreeware.com/programlistintel10.html |
||
* распаковываю |
* распаковываю |
||
− | gunzip /path/to/file/vsftpd-<ver>-local.gz |
+ | {{Root|<nowiki>gunzip /path/to/file/vsftpd-<ver>-local.gz</nowiki>}} |
* устнавливаю с помошью менеджера пакетов |
* устнавливаю с помошью менеджера пакетов |
||
− | pkgadd -d /path/to/file/vsftpd-<ver>-local.gz |
+ | {{Root|<nowiki>pkgadd -d /path/to/file/vsftpd-<ver>-local.gz</nowiki>}} |
(все файлы будут установлены в /usr/local/) |
(все файлы будут установлены в /usr/local/) |
||
Строка 235: | Строка 236: | ||
</service_bundle> |
</service_bundle> |
||
</PRE> |
</PRE> |
||
+ | ====Подробное описание секций конфига==== |
||
+ | Останавлюсь на некоторых его частях немного подробнее: |
||
+ | Стандартный заголовок (одинаковый у всех аналогичных файлов) |
||
− | Останавлюсь на некоторых его частях немного подробнее: |
||
<PRE> |
<PRE> |
||
− | |||
− | |||
− | |||
− | Standard Header. |
||
− | |||
− | Code: |
||
− | |||
<?xml version="1.0"?> |
<?xml version="1.0"?> |
||
<!DOCTYPE service_bundle SYSTEM |
<!DOCTYPE service_bundle SYSTEM |
||
"/usr/share/lib/xml/dtd/service_bundle.dtd.1"> |
"/usr/share/lib/xml/dtd/service_bundle.dtd.1"> |
||
+ | </PRE> |
||
+ | Комментарий |
||
− | |||
+ | <PRE> |
||
− | o Comment Section. |
||
− | |||
− | Code: |
||
− | |||
<!-- |
<!-- |
||
Copyright 2004 Sun Microsystems, Inc. All rights reserved. |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. |
||
Use is subject to license terms. |
Use is subject to license terms. |
||
− | pragma ident "@(#) |
+ | pragma ident "@(#)vsftpd.xml 1.2 04/08/09 SMI" |
--> |
--> |
||
+ | </PRE> |
||
+ | Имя сервиса |
||
+ | Тип (manifest) показывает что это отдельный сервис (а какие еще бывают?) |
||
+ | <PRE> |
||
+ | <service_bundle type='manifest' name='OPTnew:vsftpd'> |
||
+ | </PRE> |
||
+ | Категория сервиса, тип, версия (описательная секция) |
||
− | o The name of the service. the type(manifest) indicates a simple service rather than a milestone, the package providing the service, and the service name. |
||
+ | <PRE> |
||
− | |||
− | Code: |
||
− | |||
− | <service_bundle type='manifest' name='OPTnew:newservice'> |
||
− | |||
− | |||
− | o Service category, type, name and version. |
||
− | |||
− | Code: |
||
− | |||
<service |
<service |
||
− | + | name='site/vsftpd' |
|
− | + | type='service' |
|
− | + | version='1' |
|
+ | </PRE> |
||
− | |||
− | |||
− | o Whether multiple instances of the service will run. |
||
− | |||
− | Code: |
||
+ | Возможна ли множественный запуск сервисов (в моем случае - нет) |
||
+ | <PRE> |
||
<single_instance/> |
<single_instance/> |
||
+ | </PRE> |
||
+ | Тут цитата:<BR> |
||
− | |||
− | + | the service model to use. The entry shows that the service will be started by svc.startd. transient services are started once and not restarted.<BR> |
|
+ | Судя по всему, совершенно необязательная секция. |
||
− | |||
+ | |||
− | Code: |
||
+ | <PRE> |
||
− | |||
<property_group name='startd' type='framework'> |
<property_group name='startd' type='framework'> |
||
− | + | <propval name='duration' type='astring' value='transient' /> |
|
− | + | </property_group> |
|
+ | </PRE> |
||
+ | Команды для запуска. |
||
+ | Обратите внимание, что здесь же можно задать имя пользователя от которого команда будет выполнена. |
||
+ | <PRE> |
||
+ | <method_context> |
||
+ | <method_credential user='myuser' group='mygroup' /> |
||
+ | </method_context> |
||
+ | </PRE> |
||
+ | "Метод" - это стартовый скрипт. Я поместил свой скрипт отдельно, что бы не путать его с системными, хотя, возможно это не совсем верно. |
||
+ | Правильный путь для методов - '/lib/svc/method/' |
||
+ | <PRE> |
||
+ | <exec_method |
||
+ | type='method' |
||
+ | name='start' |
||
+ | exec='/usr/local/etc/rc.d/vsftpd start' |
||
+ | timeout_seconds='30' /> |
||
+ | Если сервисы обозначеные как зависимости не работают – сервис не должен запускатся. |
||
− | o How the service is started and stopped. |
||
+ | <PRE> |
||
+ | <dependency |
||
+ | name='usr' |
||
+ | type='service' |
||
+ | grouping='require_all' |
||
+ | restart_on='none'> |
||
+ | <service_fmri value='svc:/system/filesystem/local'/> |
||
+ | </dependency> |
||
+ | </PRE> |
||
+ | Цитата: <BR> |
||
− | Code: |
||
+ | The second entry makes sure that your service is associated with the multi-user milestone and that the multi-user milestone requires this service. |
||
+ | <PRE> |
||
− | <exec_method |
||
+ | <dependency |
||
− | type='method' |
||
− | + | name='vsftpd' |
|
+ | grouping='require_all' |
||
− | exec='/lib/svc/method/newservice start' |
||
+ | restart_on='none'> |
||
− | timeout_seconds='30' /> |
||
+ | <service_fmri value='svc:/milestone/multi-user'/> |
||
+ | </dependency> |
||
+ | </PRE> |
||
+ | Цитата: <BR> |
||
− | <exec_method |
||
+ | Creating the instance. |
||
− | type='method' |
||
+ | <PRE> |
||
− | name='stop' |
||
+ | <instance name='default' enabled='true' /> |
||
− | exec='/lib/svc/method/newservice stop' |
||
+ | <stability value='Unstable' /> |
||
− | timeout_seconds='30' /> |
||
+ | </PRE> |
||
+ | Цитата: <BR> |
||
+ | Creating information to describe the service. |
||
+ | <PRE> |
||
+ | <template> |
||
+ | <common_name> |
||
+ | <loctext xml:lang='C'> |
||
+ | New Service |
||
+ | </loctext> |
||
+ | </common_name> |
||
+ | </template> |
||
+ | </PRE> |
||
+ | ====Права доступа==== |
||
+ | <PRE> |
||
+ | chown root:sys /var/svc/manifest/site/vsftpd.xml |
||
+ | chmod 444 /var/svc/manifest/site/vsftpd.xml |
||
+ | </PRE> |
||
+ | <PRE> |
||
+ | chown root:bin /usr/local/etc/rc.d/vsftpd |
||
+ | chmod 555 /usr/local/etc/rc.d/vsftpd |
||
+ | </PRE> |
||
+ | ====Проверка конфигурационного файла==== |
||
− | o Define any dependencies for this service. The first entry states that the newservice requires the filesystem/local service. |
||
+ | <PRE> |
||
+ | svccfg validate /var/svc/manifest/site/vsftpd.xml |
||
+ | </PRE> |
||
+ | или если не проходит: |
||
+ | <PRE> |
||
+ | xmllint /var/svc/manifest/site/vsftpd.xml |
||
+ | </PRE> |
||
+ | ====Запуск сервиса==== |
||
− | Code: |
||
+ | Далее проводи импорт из файла: |
||
+ | <PRE> |
||
+ | svccfg import /var/svc/manifest/site/vsftpd.xml |
||
+ | </PRE> |
||
+ | Запуск сервиса: |
||
− | <dependency |
||
+ | <PRE> |
||
− | name='usr' |
||
+ | svcadm –v enable vsftpd |
||
− | type='service' |
||
+ | </PRE> |
||
− | grouping='require_all' |
||
− | restart_on='none'> |
||
− | <service_fmri value='svc:/system/filesystem/local'/> |
||
− | </dependency> |
||
+ | Проверить запустился ли сервис можно командой: |
||
− | o The second entry makes sure that your service is associated with the multi-user milestone and that the multi-user milestone requires this service. |
||
+ | <PRE> |
||
+ | svcs -a | grep vsftpd |
||
+ | </PRE> |
||
+ | При успешном запуске вывод должен содержать строку: |
||
− | Code: |
||
+ | <PRE> |
||
+ | online 15:23:46 svc:/site/vsftpd:default |
||
+ | </PRE> |
||
+ | Для просмотра детальной информации о сервисе следует воспользоваться следующей командой: |
||
− | <dependency |
||
− | name='newservice' |
||
− | grouping='require_all' |
||
− | restart_on='none'> |
||
− | <service_fmri value='svc:/milestone/multi-user'/> |
||
− | </dependency> |
||
+ | svcs -x vsftpd |
||
+ | вывод этой команды: |
||
− | o Creating the instance. |
||
+ | <PRE> |
||
+ | bash-4.1# svcs -x vsftpd |
||
+ | svc:/site/vsftpd:default (vsftpd_service) |
||
+ | State: online since Wed May 26 15:23:46 2010 |
||
+ | See: /var/svc/log/site-vsftpd:default.log |
||
+ | Impact: None. |
||
+ | bash-4.1# |
||
+ | </PRE> |
||
+ | Чтобы увидеть список процессов запущенных сервисом, воспользуйтесь следующей командой: |
||
− | Code: |
||
+ | <PRE> |
||
+ | bash-4.1# svcs -p vsftpd |
||
+ | STATE STIME FMRI |
||
+ | online 15:23:46 svc:/site/vsftpd:default |
||
+ | bash-4.1# |
||
+ | </PRE> |
||
+ | В случае необходимости становить сервис можно командой: |
||
− | <instance name='default' enabled='true' /> |
||
+ | <PRE> |
||
− | <stability value='Unstable' /> |
||
+ | svcadm –v disable vsftpd |
||
− | |||
+ | </PRE> |
||
− | |||
− | o Creating information to describe the service. |
||
+ | Если во время запуска произошла ошибка и сервис не смог запуститься, например из-за ошибки в конфигурации, подсистема SMF переводит его в состояние maintenance и после этого сервис не запустится командой svcadm enable. Для того чтобы запустить сервис после устранения ошибки, необходимо сначала «сбросить» его состояние командой: |
||
<PRE> |
<PRE> |
||
+ | svcadm clear vsftpd |
||
− | <template> |
||
− | <common_name> |
||
− | <loctext xml:lang='C'> |
||
− | New Service |
||
− | </loctext> |
||
− | </common_name> |
||
− | </template> |
||
</PRE> |
</PRE> |
||
+ | |||
+ | Для каждого сервиса ведется свой журнал событий. Журналы располагаются в каталоге /var/svc/log. |
||
==Профили== |
==Профили== |
Текущая версия на 10:41, 24 июня 2010
SMF
Этот документ является компиляцией из нескольких источников. к сожалению, я не помню их все.
Введение
Solaris относится к ветви System V, но отличается от остальных систем наличием специального режима работы, называемого s или S (single) и применяемого для восстановления системы. В большинстве систем System V остальные режимы (0-6) имеют аналогичное назначение, но системы отличаются структурой каталогов системных скриптов (Solaris - /etc/rcN.d, Linux - /etc/rc.d/rcN/, где N – номер режима работы). В системах System V всегда присутствуют программы init и shutdown, а в Solaris еще и reboot, halt, poweroff.
SMF - начальные сведения
В Solaris 10 появилась подсистема Service Management Facility (SMF), связанная с загрузкой системы и управлением работающими в ней службами. Поддерживается общесистемная база данных о взаимосвязях между службами и отдельный процесс отслеживает состояние служб, следовательно, порядок загрузки изменился: управление тем, какие именно службы должны запуститься, полностью передано SMF. Экземпляр (instance, каждый из запущенных с разными файлами настроек процессов) может унаследовать настройки службы в целом или иметь собственные настройки, имеющие более высокий приоритет, чем общие. Каждый экземпляр службы имеет свой идентификатор (FMRI - fault managed resource identifier), имя идентификатора всегда начинается с svc, к экземпляру можно обращаться по полному имени или по сокращенному. Службы, специфичные для конкретной системы, принято относить к категории site. Все службы содержатся в определенном контексте (scope), представляющем собой набор логически связанных служб (в Solaris 10 определен только контекст localhost).
Управление службами
Для вывода всех запущенных служб используется
Для вывода всех служб, включая те, запуск которых запрещен:
Состояния служб
Экземпляр службы в любой момент времени может находиться в одном из семи состояний:
- degraded (ослабленное) – запуск разрешен, но работа происходит с ограниченной функциональностью,
- disabled (запрещено запускать) – запуск запрещен, экземпляр службы не запущен,
- legacy_run (унаследованный) – некоторые унаследованные службы не подлежат управлению через SMF, но их работу можно наблюдать стандартными для SMF средствами,
- maintenance (обслуживание) – экземпляр службы аварийно завершился,
- offline (не работает) – запуск разрешен, но экземпляр службы еще не запущен или нет возможности его запустить,
- online (работает) – запуск разрешен, экземпляр службы работает без проблем,
- uninitialized (неинициализирован) – в этом состоянии находятся все службы до считывания конфигурации.
Перевод службы из состояния в состояние осуществляется автоматически. Просмотр служб, находящихся в состоянии maintenance, выполняется командой
Описание служб
В описании каждой службы указывается, от каких служб и/или файлов она зависит. Типы взаимосвязи (зависимости): 1. require_all – считается удовлетворенной, когда все перечисленные службы находятся в состояниях online или degraded или все указанные файлы присутствуют. 2. require_any – считается удовлетворенной, когда хотя бы одна из перечисленных служб находится в состояниях online или degraded или хотя бы один из указанных файлов присутствует. 3. optional_all – считается удовлетворенной, когда все перечисленные службы находятся в состояниях online или degraded или в состояниях disabled, maintenance, offline, либо не существуют. 4. exclude_all – считается удовлетворенной, когда все перечисленные службы запрещено запускать, либо они находятся в состоянии maintenance, или все указанные службы или файлы отсутствуют.
Для изменения состояния службы используется
- svcadm (чтобы измененные настройки вступили в силу – svcadm refresh)
- для изменения настроек– svccfg(и ее подкоманды – listsnap, selectsnap и revertsnap), а для получения информации о свойствах– svcprop.
Каждая служба имеет свое объявление (manifest) – файл в формате XML, содержащий полное описание всех свойств службы или ее экземпляра. Объявления служб хранятся в каталоге /var/svc/manifest. Файлы объявлений не являются источником информации для служб SMF -таким источником является репозиторий. Для импорта информации из файлов объявлений в репозиторий используется команда svccfg import (при перезагрузке это происходит автоматически), а для получения архива XML с постоянными свойствами всех служб - svccfg export. Профиль – это файл XML, содержащий список служб, разрешенных к запуску. После установки или обновления система обращается к профилю generic.xml, который является символической ссылкой на generic_limited_net.xml.
Пример установки стороннего ПО в качестве службы
Для примера - устанавливаю vsftpd в качестве службы.
Установка ПО
- скачиваю пакет и зависимости с http://www.sunfreeware.com/programlistintel10.html
- распаковываю
- устнавливаю с помошью менеджера пакетов
(все файлы будут установлены в /usr/local/)
Настройка
Настройка vsftpd довольна проста. Конфигурационый файл достаточно короткий, все опции документированы.
cat /usr/local/etc/vsftpd/vsftpd.conf | grep -v "#"
anonymous_enable=NO local_enable=YES write_enable=YES local_umask=022 anon_upload_enable=NO anon_mkdir_write_enable=NO dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES chown_uploads=YES idle_session_timeout=600 data_connection_timeout=120 chroot_list_enable=YES chroot_local_user=YES chroot_list_file=/usr/local/etc/vsftpd/vsftpd.chroot_list ls_recurse_enable=YES listen=YES listen_ipv6=NO secure_chroot_dir=/var/empty
Обратить внимание на secure_chroot_dir=/var/empty - это должен быть пустой существующий каталог.Использовать или нет chroot_list_file=/usr/local/etc/vsftpd/vsftpd.chroot_list - по желанию. Я всегда использую.
Стартовый скрипт
Стартовый скрипт - простой. Для работы с системой SMF он должен отрабатывать как минимуму 2 возможных параметра - start и stop
- Обратить внимание - bash установлен в системе.
#!/usr/local/bin/bash SVCNAME=vsftpd VSFTPD_EXEC=/usr/local/sbin/vsftpd VSFTPD_CONF=/usr/local/etc/vsftpd/vsftpd.conf VSFTPD_PID=/usr/local/var/run/vsftpd.pid start() { echo "Starting ${SVCNAME}" $VSFTPD_EXEC "${VSFTPD_CONF}" & echo $! > $VSFTPD_PID echo Pid is $VSFTPD_PID } stop() { echo "Stopping ${SVCNAME}" if [ -f ${VSFTPD_PID} ]; then NUM_PID=`cat ${VSFTPD_PID}` /usr/bin/kill -9 $NUM_PID else echo "Couldn't found" ${VSFTPD_PID} fi } case $1 in start) start exit $? ;; stop) stop exit $? ;; restart) stop sleep 5 start ;; *) echo "Usage: `basename $0` {start | stop | restart}" exit 64 ;; esac
Интеграция с системой SMF
Разные источники советуют помещать конфигурационный файл (описание) в разные каталоги. Я встречал варианты
- /var/svc/manifest/site/
- /var/svc/manifest/application
Судя по всему, это просто логическое разделение, и используется для удобства.
Конфигурационный файл сервиса
Создаю файл описания:
# cat /var/svc/manifest/site/vsftpd.xml
<!-- Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. pragma ident "@(#)vsftpd.xml 1.2 04/08/09 SMI" --> <service_bundle type='manifest' name='OPTnew:vsftpd'> <service name='site/vsftpd' type='service' version='1'> <single_instance/> <dependency name='usr' type='service' grouping='require_all' restart_on='none'> <service_fmri value='svc:/system/filesystem/local'/> </dependency> <dependency name='vsftpd' type='service' grouping='require_all' restart_on='none'> <service_fmri value='svc:/milestone/multi-user'/> </dependency> <exec_method type='method' name='start' exec='/usr/local/etc/rc.d/vsftpd start' timeout_seconds='30' /> <exec_method type='method' name='stop' exec='/usr/local/etc/rc.d/vsftpd stop' timeout_seconds='30' /> <property_group name='startd' type='framework'> <propval name='duration' type='astring' value='transient' /> </property_group> <instance name='default' enabled='true' /> <stability value='Unstable' /> <template> <common_name> <loctext xml:lang='C'> vsftpd_service </loctext> </common_name> </template> </service> </service_bundle>
Подробное описание секций конфига
Останавлюсь на некоторых его частях немного подробнее:
Стандартный заголовок (одинаковый у всех аналогичных файлов)
<?xml version="1.0"?> <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
Комментарий
<!-- Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. pragma ident "@(#)vsftpd.xml 1.2 04/08/09 SMI" -->
Имя сервиса Тип (manifest) показывает что это отдельный сервис (а какие еще бывают?)
<service_bundle type='manifest' name='OPTnew:vsftpd'>
Категория сервиса, тип, версия (описательная секция)
<service name='site/vsftpd' type='service' version='1'
Возможна ли множественный запуск сервисов (в моем случае - нет)
<single_instance/>
Тут цитата:
the service model to use. The entry shows that the service will be started by svc.startd. transient services are started once and not restarted.
Судя по всему, совершенно необязательная секция.
<property_group name='startd' type='framework'> <propval name='duration' type='astring' value='transient' /> </property_group>
Команды для запуска. Обратите внимание, что здесь же можно задать имя пользователя от которого команда будет выполнена.
<method_context> <method_credential user='myuser' group='mygroup' /> </method_context>
"Метод" - это стартовый скрипт. Я поместил свой скрипт отдельно, что бы не путать его с системными, хотя, возможно это не совсем верно. Правильный путь для методов - '/lib/svc/method/'
<exec_method type='method' name='start' exec='/usr/local/etc/rc.d/vsftpd start' timeout_seconds='30' /> Если сервисы обозначеные как зависимости не работают – сервис не должен запускатся. <PRE> <dependency name='usr' type='service' grouping='require_all' restart_on='none'> <service_fmri value='svc:/system/filesystem/local'/> </dependency>
Цитата:
The second entry makes sure that your service is associated with the multi-user milestone and that the multi-user milestone requires this service.
<dependency name='vsftpd' grouping='require_all' restart_on='none'> <service_fmri value='svc:/milestone/multi-user'/> </dependency>
Цитата:
Creating the instance.
<instance name='default' enabled='true' /> <stability value='Unstable' />
Цитата:
Creating information to describe the service.
<template> <common_name> <loctext xml:lang='C'> New Service </loctext> </common_name> </template>
Права доступа
chown root:sys /var/svc/manifest/site/vsftpd.xml chmod 444 /var/svc/manifest/site/vsftpd.xml
chown root:bin /usr/local/etc/rc.d/vsftpd chmod 555 /usr/local/etc/rc.d/vsftpd
Проверка конфигурационного файла
svccfg validate /var/svc/manifest/site/vsftpd.xml
или если не проходит:
xmllint /var/svc/manifest/site/vsftpd.xml
Запуск сервиса
Далее проводи импорт из файла:
svccfg import /var/svc/manifest/site/vsftpd.xml
Запуск сервиса:
svcadm –v enable vsftpd
Проверить запустился ли сервис можно командой:
svcs -a | grep vsftpd
При успешном запуске вывод должен содержать строку:
online 15:23:46 svc:/site/vsftpd:default
Для просмотра детальной информации о сервисе следует воспользоваться следующей командой:
svcs -x vsftpd
вывод этой команды:
bash-4.1# svcs -x vsftpd svc:/site/vsftpd:default (vsftpd_service) State: online since Wed May 26 15:23:46 2010 See: /var/svc/log/site-vsftpd:default.log Impact: None. bash-4.1#
Чтобы увидеть список процессов запущенных сервисом, воспользуйтесь следующей командой:
bash-4.1# svcs -p vsftpd STATE STIME FMRI online 15:23:46 svc:/site/vsftpd:default bash-4.1#
В случае необходимости становить сервис можно командой:
svcadm –v disable vsftpd
Если во время запуска произошла ошибка и сервис не смог запуститься, например из-за ошибки в конфигурации, подсистема SMF переводит его в состояние maintenance и после этого сервис не запустится командой svcadm enable. Для того чтобы запустить сервис после устранения ошибки, необходимо сначала «сбросить» его состояние командой:
svcadm clear vsftpd
Для каждого сервиса ведется свой журнал событий. Журналы располагаются в каталоге /var/svc/log.
Профили
В каталоге /var/svc/profile есть предустановленные профили:
- /var/svc/profile/generic_open.xml – службы, стандартные для более ранних версий Solaris (до S10U3 включительно);
- /var/svc/profile/generic_limited_net.xml – стандартные службы, как и в generic_open.xml, но с запретом запускать сетевые службы, кроме ssh;
- /var/svc/profile/ns_*.xml –запуск служб, имеющих отношение к службе имен;
- /var/svc/profile/platform_*.xml – профиль служб, связанных с конкретной платформой.
Если создать профиль site.xml, в качестве списка запускаемых по умолчанию служб будет использоваться он. Для каждого экземпляра службы существует несколько снимков настроек, которые можно использовать для возврата к предыдущим:
- initial - начальная настройка службы, созданная при первом импорте ее описания,
- last-import - последняя из импортированных с помощью svccfg,
- running - настройка запущенного экземпляра службы,
- start – снимок при последнем успешном переходе экземпляра службы в состояние online,
- previous - созданный при последнем возврате к предыдущим настройкам.
Режимы работы системы (runlevels)
Для упрощения переключения между разными наборами программ, используемых для разных типов задач, была создана концепция режимов работы системы. Любая UNIX System V может работать в одном из семи режимов. В Solaris используется восемь режимов (0-6 и S или s). Режим работы иногда называют состоянием (state) или уровнем выполнения. Набор программ, запускаемых в данном режиме, определяется содержимым файла /etc/inittab, в котором указываются стартовые скрипты, автоматически запускаемые при переходе к каждому из уровней выполнения. Эти скрипты находятся в каталоге /etc, и из них вызываются другие скрипты, расположенные в каталогах /etc/rcN.d. Режим 0 - система останавливается, управление передается OpenBootPROM, а для архитектуры х86 - система останавливается и затем может быть перезагружена нажатием любой клавиши. Режим 1 - файловые системы для многопользовательской работы, смонтированы, запущены некоторые демоны, но пользователям не разрешено входить в систему (работает один пользователь). Режим s (S) называется однопользовательским. Все пользовательские процессы останавливаются, а файловые системы, необходимые для многопользовательской работы, демонтируются. Доступ к системе возможен только с консоли и с логином, не требующим доступа к пользовательским файловым системам. Система переходит в состояние s автоматически, когда файловая система /usr повреждена и переход в этот режим возможен даже при поврежденном или отсутствующем файле /etc/inittab. Пре переходе в режим S из других режимов файловые системы, которые уже смонтированы к этому моменту, остаются смонтированными, но все процессы, запущенные ранее, которые должны быть запущены только в многопользовательских режимах или запущенные от имени пользователей, завершаются.
- Режим 2 – многопользовательский.
- Режим 3 – тоже многопользовательский, но поддерживается разделение каталогов с помощью NFS, в отличие от режима 2.
- Режим 4 – в настоящее время не реализован.
- Режим 5 – операционная система останавливается, если есть аппаратная поддержка выключения питания – оно автоматически отключается.
- Режим 6 - останавливает и перезагружает систему в состояние, определяемое записью initdefault в файле /etc/inittab. Если введена команда touch /reconfigure, конфигурирует перед перезагрузкой новый образ ядра (после изменения его параметров или добавления новых устройств).
Проверить, в какой режим работы загрузилась система, можно командой
# who -r
run-level 3 2008-07-05 22:57
Этапы работы системы
В Solaris 10 введено понятие "этапов" (milestone). Разные этапы предполагают функционирование разных наборов служб. Переход от одного этапа к другому и объявление одного из этапов "этапом по умолчанию" (к которому система должна прийти в результате нормальной загрузки) выполняется командами svcs, svcadm и svccfg. В системах SPARC указание этапа работы при загрузке выполняется так:
Например, для запуска системы с загрузкой всех установленных служб указывается этап all, а без запущенных служб (когда загружаются только init, svc.startd и svc.configd) – этап none.
Порядок загрузки системы изменился: теперь после загрузки ядра запускается процесс init, он считывает файл /etc/default/init и устанавливает переменные среды окружения (по умолчанию устанавливается TIMEZONE, а установка других переменных зависит от дистрибутива и версии системы), затем init считывает файл /etc/inittab и запускает все процессы, у которых в поле "тип запуска" указано sysinit, и управление дальнейшим запуском служб переходит к службе svc.startd.