Weblogic 为什么solaris smf提供“信息”;“方法或服务退出超时”;即使方法以状态0退出

Weblogic 为什么solaris smf提供“信息”;“方法或服务退出超时”;即使方法以状态0退出,weblogic,solaris-10,Weblogic,Solaris 10,我对Solaris SMF真的很陌生,当时正在为Weblogic Nodemanager编写一个SMF。我遵循以下步骤: 为了测试SMF在服务被终止时是否正在重新启动服务,我从另一个终端向它发送终止信号,但它不会重新启动。日志文件是这样说的: [ Nov 19 10:17:39 Stopping because process received fatal signal from outside the service. ] Killed + set +x [ Nov 19 10:17:39

我对Solaris SMF真的很陌生,当时正在为Weblogic Nodemanager编写一个SMF。我遵循以下步骤:

为了测试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' />

第一条消息的原因:

方法“停止”已退出,状态为0

这是因为在方法脚本中执行的内容将在usr/local/Oracle/Middleware/wlserver_10.3/server/bin/startNodeManager2.sh中

正常情况下,有效的方法将返回宏
SMF\u EXIT\u OK

我不知道为什么会出现第二条消息。必须与'killNodeManager.sh'相关。

看起来,
killNodeManager.sh
有内部错误。它找不到应该停止的进程的PID。所以,它很快就退出了,在它开始的1秒之内。然而,从SMF的角度来看,与该服务相关的合同#100仍然有效。在为“stop”方法执行分配了60秒后,SMF发现契约仍然存在,除了试图终止整个契约之外,它别无选择。它合理地认为“停止”方法没有起作用。因此,您将看到日志中的最后一条消息,并且服务在终止契约后将进入维护模式


希望这有帮助

很抱歉,回复太晚,我认为返回状态为0的消息是我们的NodeManager结束于维护模式的原因。我们发现,如果Nodemanager在没有先关闭weblogic的情况下关闭,那么很多时候Nodemanager会进入维护模式。但是,如果我们先执行
svcadm disable weblogic
,然后执行
svcadm disable nodemanager
,nodemanager就不会进行维护。而且,很明显,SMF说退出状态),即使我返回SMF_EXIT_ok,也有意义。想知道为什么即使流程停止,合同100也会激活?我认为这不是流程停止而合同上升的情况。无论是流程还是合同,都可能被取消。但是,
killNodeManager.sh
中的健壮性缺陷可能不允许它可靠地找到进程。结果,它会吐出上面日志中捕获的错误消息。查看此脚本以了解可能导致此情况的条件。另一种可能性是多流程合同,但我认为这里的情况并非如此。