我正在使用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