2010-11-19 66 views
0

我對Solaris SMF來說確實是一個新手,並且正在爲Weblogic Nodemanager編寫一個SMF。我遵循以下步驟: http://www.camelrichard.org/controlling-weblogic-node-manager-solaris-smf-non-root爲什麼solaris smf給出「方法或服務退出超時」,即使該方法退出狀態爲0

要測試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

原因第一條消息:

法「停止」與狀態退出0

這是因爲什麼在你的方法執行將在usr/local/Oracle/Middleware/wlserver_10.3/server/bin/startNodeManager2.sh中的腳本

正常情況下,工作的方法將返回宏SMF_EXIT_OK 我不確定爲什麼第二條消息出現。必須是與'killNodeManager.sh'相關的東西

+0

對不起,對於遲到的回覆,我認爲返回狀態爲0的消息是我們的NodeManager以維護模式結束的原因。我們發現,如果Nodemanager首先關閉而不關閉weblogic,則很多時候NodeManager進入維護模式。但是,如果我們執行了'svcadm disable weblogic',然後是'svcadm disable nodemanager',那麼NodeManager不會進行維護。 此外,顯然SMF說退出狀態),即使我返回SMF_EXIT_OK – Jatin 2012-03-26 20:50:19

0

IT看起來像killNodeManager.sh有內部錯誤。它無法找到它應該停止的進程的PID。所以,它從一開始就在1秒內退出很快。但是,從SMF角度來看,與此服務相關的第100號合同仍處於活動狀態。在爲「停止」方法執行分配60秒之後,SMF發現合同仍然在運轉,除了試圖殺死整個合同外別無其他選擇。它合法地認爲「停止」方法沒有完成它的工作。因此,您會看到日誌中的最後一條消息,並且在終止合同後服務進入維護模式。

希望這會有所幫助!

+0

這是有道理的。想知道爲什麼合約100將會活躍,即使這個過程已經結束了嗎? – Jatin 2012-09-21 04:40:51

+0

我認爲情況並非如此,因爲這個過程正在關閉,合同也在上漲。流程和合同都可能會啓動。但'killNodeManager.sh'中的健壯性缺陷可能無法使其可靠地找到該進程。因此,它會吐出上面日誌中捕獲的錯誤消息。看看這個腳本,看看可能導致這種情況的條件。 另一種可能性是多進程合同,但我不認爲這是這種情況。 – evolvah 2012-09-21 12:36:51