Как проверить, работает ли JBoss на сервере Unix? - PullRequest
12 голосов
/ 06 января 2012

У меня есть скрипт ниже, который я хотел бы вывести «jboss not running» или «jboss is running» в зависимости от того, может ли он найти процесс 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 голосов
/ 06 января 2012

Вместо проверки вывода просто используйте команду:

if pgrep -f jboss >/dev/null
  then
  echo "jboss is running"
else
  echo "jboss is not running"
fi 
3 голосов
/ 06 января 2012

Попробуйте использовать 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 голосов
/ 04 апреля 2014

Получить идентификатор процесса 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 
1 голос
/ 01 ноября 2013

Это лучший способ:

if [ -z "$(ps -ef | grep java | grep jboss)" ]
then 
 echo "JBoss is NOT running"
else
  echo "JBoss is running"
fi
1 голос
/ 17 ноября 2012
#! /bin/bash
 if [ -z "$(ps -ef | grep org.jboss.Main)" ]
then 
 echo "jboss is not running"
else
  echo "jboss is running"
fi
0 голосов
/ 09 октября 2018

Вы можете использовать функцию ниже в скрипте bash; ниже функция возвращает PID Jboss, если Jboss еще не запущен. обратите внимание, что $ 1 - это базовый каталог вашего jboss. например: $ 1 = / корень / приложение / 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)

0 голосов
/ 08 марта 2016

Лучший способ - использовать это

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 голосов
/ 20 февраля 2012

Вы не можете проверить jboss таким образом. Потому что Jboss начинал иногда логировать время как 1-2 минуты. Таким образом, ваш сценарий показывает только процесс Jboss, а не «Jboss действительно UP» (я имею в виду приложение на JBoss).

0 голосов
/ 06 января 2012

Запустите jps , grep это для линии с вами jboss, вырезайте PID из линии и проверьте PID.

...