我对 Solaris SMF 非常陌生,正在为 Weblogic Nodemanager 编写 SMF。我按照以下步骤操作: http://www.camelrichard.org/controlling-weblogic-node-manager-solaris-smf-non-root
为了测试 SMF 在服务被终止时是否重新启动服务,我从另一个终端向其发送终止信号,但它没有重新启动。这就是日志文件的内容:
[ Nov 19 10:17:39 Stopping because process received fatal signal from outside the service. ]
Killed
+ set +x
[ Nov 19 10:17:39 Executing stop method ("/usr/local/Oracle/Middleware/wlserver_10.3/server/bin/killNodeManager.sh") ]
Trying to find the PID of the nodeManager process
Cannot find the PID, NodeManager is not running - cannot kill
[ Nov 19 10:17:39 Method "stop" exited with status 0 ]
[ Nov 19 10:18:40 Method or service exit timed out. Killing contract 100 ]
我不明白的是,如果您查看最后两行,第一行表示方法已退出,而第二行表示方法超时。我觉得这很奇怪。有人知道这里发生了什么事吗? smf的相关部分如下:
<service_bundle type='manifest' name='nodemanager'>
<service name='application/management/nodemanager' type='service' version='1'>
<single_instance />
<dependency
name='multi-user-server'
grouping='require_all'
restart_on='error'
type='service'>
<service_fmri value='svc:/milestone/multi-user-server' />
</dependency>
<exec_method
type='method'
name='start'
exec='/usr/local/Oracle/Middleware/wlserver_10.3/server/bin/startNodeManager2.sh'
timeout_seconds='120' >
<!-- Trying as root for now :
<method_context>
<method_credential user='weblogic' group='weblogic' />
</method_context>
-->
</exec_method>
<exec_method
type='method'
name='stop'
exec='/usr/local/Oracle/Middleware/wlserver_10.3/server/bin/killNodeManager.sh'
timeout_seconds='60' />
第一条消息的原因:
方法“stop”退出,状态为 0
这是因为您的方法脚本中执行的内容将位于 usr/local/Oracle/Middleware/wlserver_10.3/server/bin/startNodeManager2.sh 中
通常有效的方法会返回宏
SMF_EXIT_OK
我不确定为什么会出现第二条消息。一定是与“killNodeManager.sh”相关的东西
看起来
killNodeManager.sh
有内部错误。它找不到应该停止的进程的 PID。所以,它退出的速度非常快,从开始后不到1秒。然而,从 SMF 的角度来看,与此服务相关的合同 #100 仍然处于活动状态。在分配给“stop”方法执行 60 秒后,SMF 发现合约仍在运行,它别无选择,只能尝试终止整个合约。它合理地假设“停止”方法没有发挥作用。因此,您会在日志中看到最后一条消息,并且服务在终止合约后进入维护模式。
希望这有帮助!