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