如何在Unix服务器上检查JBoss是否正在运行?

12
我有下面的脚本,我想根据进程列表中是否可以找到jboss进程来回显"jboss未运行"或"jboss正在运行"。但是,当我关闭Jboss时,它仍然执行Else条件,并显示"jboss正在运行"。如果我手动执行"pgrep -f jboss",它没有返回任何内容,那么为什么它仍然进入了Else条件?困惑
#!/bin/bash
if [ -z "$(pgrep -f jboss)" ]
  then
  echo "jboss is not running"
else
  echo "jboss is running"
fi 
谢谢你的帮助!
9个回答

17

不要检查输出,只需使用以下命令:

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

4

获取JBoss 7 / EAP 6 的进程ID:

pgrep -f org.jboss.as

如果您想用以下内容增强前面的脚本:

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

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

2

这是最好的方法:

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

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

1

最好的方法是使用这个

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

如果您想检查是否部署了 ear 或 war 文件,则可以使用以下命令。
$JBOSS_HOME/bin/jboss\-cli.sh --connect controller=localhost:$PORT  --command="deployment-info --name=$YOUR_WAR_OR_EAR_FILE" 

0

运行 jpsgrep 查找包含 jboss 的行,cut 从该行中提取 PID 并检查 PID。


0

您可以在Bash脚本中使用以下函数;该函数将返回Jboss的PID,如果Jboss已经启动。请注意,$1是您的Jboss基目录。例如: $1=/root/app/wildfly-X.Final

function getJbossPID() {
local pid;
local DIR=$1;
if [[ ! -z $DIR ]]; then
    local result=();
    jps=`jps -m`
    if [[ ! -z $jps ]]; then
        IFS='
        '
        jps_result=`jps -m`
        for jps_line_result in $jps_result; do
            result_jps=$jps_line_result;
            if [[ $result_jps == *$DIR* ]]; then
                unset IFS
                array=( $result_jps );
                pid=${array[0]};
            fi
        IFS='
        '
        done;
        unset IFS;
    fi
fi
echo $pid;
}

您可以像下面这样使用上述函数:

PID=$(getJbossPID $YOUR_JBOSS)


-2
你不能以那种方式检查jboss。 因为Jboss有时会启动很长时间,如1-2分钟。 因此,您的脚本仅显示进程Jboss,而不是“Jboss确实已经启动”(我指的是在JBoss上的应用程序)。

你没有回答他的问题,你只是解释了为什么他的检查不足以监控jboss。 - itsbruce

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接