Solaris создание сервисов SMF
- Details
- Category: solaris open Indiana
Для создания сервиса необходим XML файл - манифест, в котором будут прописаны параметры работы сервиса.
Шаблон манифеста:
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type='manifest' name='service_name'>
<service
name='network/service_name'
type='service'
version='1'>
<create_default_instance enabled='false' />
<single_instance />
<dependency name='physical'
grouping='optional_all'
restart_on='error'
type='service'>
<service_fmri value='svc:/network/physical:default'/>
</dependency>
<exec_method
type='method'
name='start'
exec='/service_start_script start'
timeout_seconds='60' />
<exec_method
type='method'
name='stop'
exec='/service_stop_script'
timeout_seconds='60' />
<exec_method
type='method'
name='refresh'
exec='/service_start_script refresh'
timeout_seconds='60' />
<property_group name='startd' type='framework'>
<propval name='duration' type='astring' value='transient' />
</property_group>
</service>
</service_bundle>
'service_name' – Имя нашего сервиса
name='network/service_name' – Указывается полное наименование. Примеры: system/service_name , application/service_name итд.
<create_default_instance enabled='false' />
<single_instance /> – сервис имеет один инстанс и создается в выключенном состоянии
dependency – указываются зависимости сервиса
exec_method – определяется управление сервисом по средствам методов start, stop, refresh.
exec='/service_start_script – указываем скрипт управления сервисом. Например, запуска приложения.
property_group – настройки сервиса
После создания манифеста проверяем его:
# svccfg validate service_name.xml
Если в результате получим: svccfg: couldn't parse document
Необходимо более детально определить в каком месте xml файла есть ошибки:
# xmllint --valid service_name.xml
После проверки импортируем манифест:
# svccfg –v import
Запускаем сервис:
# svcadm enable service_name
Проверяем:
# svcs –x service_name
Если сервис не запустился, смотрим в лог и после исправления, сообщаем об этом системе:
# svcadm clear service_name