Назад | Перейти на главную страницу

Служба уничтожения SMF Solaris из-за смерти ребенка

Я использую SMF для управления службой в Solaris10.

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

У меня проблема в том, что когда я вручную убиваю один из этих дочерних процессов, используя сигнал KILL, SMF перезапускает основную службу:

[ Aug 27 08:07:06 Stopping because process received fatal signal from outside the service. ]

Есть ли способ настроить SMF или манифест службы, чтобы SMF не убить службу, если один из подпроцессов службы будет убит?

TIA

В манифесте необходимо указать следующее:

<property_group name='startd' type='framework'>
    <!-- sub-process core dumps shouldn't restart session -->
    <propval name='ignore_error' type='astring' value='core,signal' />
</property_group>

Или вы можете сделать это на лету с помощью:

svccfg -s svc:/your/service:default
svccfg> setprop startd/ignore_error = astring:"core,signal"
svccfg> ^D

У меня была такая же проблема только сейчас, и я смог решить ее, изменив сам процесс обслуживания, чтобы запустить дочерние элементы, завернутые внутри /usr/sbin/ctrun -l child <command-and-arguments>. Сам манифест использует «дочернюю» сервисную модель.

Видеть contract(4) и ctrun(1) для подробностей.

если вы попробуете метод "на лету" и получите Нет такой группы свойств "startd". вам нужно сначала добавить свойство.

svccfg -s svc:/your/service:default
svccfg> addpg startd framework
svccfg> setprop startd/ignore_error = astring:"core,signal"
svccfg> ^D