我正在使用SMF管理Solaris10下的服务。
此服务本身是一个进程管理器,并派生出许多子进程,其中一些子进程偶尔会死亡(或由于各种原因被终止)。但是服务进程本身非常强大,永远不会死亡。
我遇到的问题是,当我使用 KILL 信号手动终止其中一个子进程时,SMF 将重新启动主服务:
[ Aug 27 08:07:06 Stopping because process received fatal signal from outside the service. ]
有没有办法可以配置 SMF 或服务清单,以便 SMF不是如果其中一个服务子进程被终止,是否终止该服务?
短暂性脑缺血发作
答案1
您需要在清单中设置以下内容:
<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
答案2
我刚才遇到了同样的问题,并且能够通过更改服务进程本身来启动包装在里面的子进程来解决它/usr/sbin/ctrun -l child <command-and-arguments>
。清单本身使用“子”服务模型。
请参阅contract(4)
和ctrun(1)
了解详情。
答案3
如果你尝试即时方法并得到没有这样的属性组‘startd’您需要先添加属性。
svccfg -s svc:/your/service:default
svccfg> addpg startd framework
svccfg> setprop startd/ignore_error = astring:"core,signal"
svccfg> ^D