2012-01-06 159 views
9

我有一個腳本下面,我想回聲「jboss不運行」或「jboss正在運行」,具體取決於它是否可以在進程列表中找到jboss進程。但是,當我關閉Jboss時,它仍然執行Else條件並且說「jboss正在運行」。如果我手動執行「pgrep -f jboss」,它不會返回任何內容,那麼爲什麼它仍然會進入Else狀態? 不解如何檢查JBoss是否在Unix服務器上運行?

#!/bin/bash 
if [ -z "$(pgrep -f jboss)" ] 
    then 
    echo "jboss is not running" 
else 
    echo "jboss is running" 
fi 

感謝您的幫助!

回答

0

運行JPSgrep的它隨你行JBoss和PID從線並檢查PID。

3

嘗試使用命令的exit status -

#!/bin/bash 

pgrep -f jboss &> /dev/null 
if [ $? -eq 0 ] 
    then 
    echo "jboss is running" 
else 
    echo "jboss is not running" 
fi 
12

而不是檢查的輸出,只需要使用命令:

if pgrep -f jboss >/dev/null 
    then 
    echo "jboss is running" 
else 
    echo "jboss is not running" 
fi 
-2

你不能檢查的JBoss那樣。 因爲Jboss有時會以1-2分鐘的時間記錄時間。 因此,你的腳本只顯示進程Jboss,而不是「Jboss真的很忙」(我的意思是JBoss上的應用程序)。

+0

你還沒有回答他的問題用這個

result='$jboss/bin/jboss-cli.sh --connect controller=localhost:$controller_port --commands=\"read-attribute server-state\" > out 2&1' echo "$result" | grep -q "running" if [ $? -eq 0 ];then echo "Jboss running" fi 

;你只是解釋了他的支票爲什麼不足以監控jboss。 – itsbruce 2012-10-26 12:19:15

1
#! /bin/bash 
if [ -z "$(ps -ef | grep org.jboss.Main)" ] 
then 
echo "jboss is not running" 
else 
    echo "jboss is running" 
fi 
1

這是最好的辦法:

if [ -z "$(ps -ef | grep java | grep jboss)" ] 
then 
echo "JBoss is NOT running" 
else 
    echo "JBoss is running" 
fi 
2

獲取進程ID的JBoss 7/EAP 6:

pgrep -f org.jboss.as 

所以,如果你想加強與前者的例子腳本這個:

if [ -z "$(pgrep -f org.jboss.as)" ] 
then 
echo "JBoss is NOT running" 
else 
    echo "JBoss is running" 
fi 
0

最好的辦法是,如果你想檢查耳朵或戰爭文件部署,那麼你可以使用下面的命令

$JBOSS_HOME/bin/jboss\-cli.sh --connect controller=localhost:$PORT --command="deployment-info --name=$YOUR_WAR_OR_EAR_FILE" 
相關問題