Я использую 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