由于孩子死亡,Solaris SMF终止服务

我正在使用SMFpipe理Solaris10下的服务。

这个服务本身就是一个进程pipe理器,并且分离出许多subprocess,其中一些偶尔会死掉(或者因为各种原因而死亡)。 服务过程本身是非常强大的,但永远不会死。

我遇到的问题是,当我使用KILL信号手动杀死其中一个subprocess时,SMF将重新启动主服务:

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

有没有一种方法可以configurationSMF或服务清单,使SMF 不会杀死服务,如果其中一个服务subprocess被杀害?

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)

如果你尝试在飞行方法,并得到没有这样的属性组“启动”,你需要首先添加属性。

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