Solaris SMF уничтожает службу, потому что ребенок умирает

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

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

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

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

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

ТИА

3 ответа

Вы должны установить следующее в своем манифесте:

<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
Другие вопросы по тегам