oi

Solaris создание сервисов SMF

Для создания сервиса необходим 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