Назад | Перейти на главную страницу

Запускаете JBoss-5.1.0.GA в качестве службы / демона в Red Hat?

Я использую JBoss 5.1.0 GA в Red Hat (Amazon ECS) ...

Я пытаюсь настроить его, чтобы JBoss работал как служба / демон (сейчас он запускается только тогда, когда я вручную SSH и вызываю sh $ JBOSS_HOME / bin / run.sh).

Вот что я сделал до сих пор:

(1) Создал следующий скрипт jboss в /etc/init.d/:

JBOSS_HOME=${JBOSS_HOME:-"/usr/jboss-5.1.0.GA"}

JBOSS_USER=${JBOSS_USER:-"jboss"}

JAVAPTH=${JAVAPTH:-"/usr/java/jdk/bin"}

JBOSS_CONF=${JBOSS_CONF:-"default"}

JBOSS_BIND_ADDR=${JBOSS_HOST:+"-b $JBOSS_HOST"}

JBOSSCP=${JBOSSCP:-"$JBOSS_HOME/bin/shutdown.jar:$JBOSS_HOME/client/jnet.jar"}

JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh -c $JBOSS_CONF $JBOSS_BIND_ADDR"}

if [ "$JBOSS_USER" = "RUNASIS" ]; then
  SUBIT=""
else
  SUBIT="su - $JBOSS_USER -c "
fi

if [ -n "$JBOSS_CONSOLE" -a ! -d "$JBOSS_CONSOLE" ]; then
  # ensure the file exists
  touch $JBOSS_CONSOLE
  if [ ! -z "$SUBIT" ]; then
    chown $JBOSS_USER $JBOSS_CONSOLE
  fi 
fi

if [ -n "$JBOSS_CONSOLE" -a ! -f "$JBOSS_CONSOLE" ]; then
  echo "WARNING: location for saving console log invalid: $JBOSS_CONSOLE"
  echo "WARNING: ignoring it and using /dev/null"
  JBOSS_CONSOLE="/dev/null"
fi

JBOSS_CONSOLE=${JBOSS_CONSOLE:-"/dev/null"}

JBOSS_CMD_START="cd $JBOSS_HOME/bin; $JBOSSSH"
JBOSS_CMD_STOP=${JBOSS_CMD_STOP:-"java -classpath $JBOSSCP org.jboss.Shutdown --shutdown"}

if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then
  export PATH=$PATH:$JAVAPTH
fi

if [ ! -d "$JBOSS_HOME" ]; then
  echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME
  exit 1
fi

echo JBOSS_CMD_START = $JBOSS_CMD_START

case "$1" in
start)
    cd $JBOSS_HOME/bin
    if [ -z "$SUBIT" ]; then
        eval $JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &
    else
        $SUBIT "$JBOSS_CMD_START >${JBOSS_CONSOLE} 2>&1 &" 
    fi
    ;;
stop)
    if [ -z "$SUBIT" ]; then
        $JBOSS_CMD_STOP
    else
        $SUBIT "$JBOSS_CMD_STOP"
    fi 
    ;;
restart)
    $0 stop
    $0 start
    ;;
*)
    echo "usage: $0 (start|stop|restart|help)"
esac

(2) Сделал скрипт исполняемым и сменил владельца, выполнив следующие действия:

sudo chown root:root /etc/init.d/jboss
sudo chmod ug+x /etc/init.d/jboss

(3) Когда я попытался запустить его, я получил следующий результат (а JBoss не запустился):

JBOSS_CMD_START = cd /usr/jboss-5.1.0.GA/bin; /usr/jboss-5.1.0.GA/bin/run.sh -c default

Вопросы:

(1) Что я делаю не так?

(2) Как мне настроить его, чтобы он работал от имени пользователя root? Нужно ли мне добавлять группу JBoss и пользователя JBoss?

Я могу вручную запустить JBoss через $ JBOSS_HOME / bin, но хотел бы, чтобы он работал все время ...

Любая помощь приветствуется ...

Есть ли какая-то конкретная причина, по которой у вас есть отвращение к использованию сценария инициализации bin / jboss_init_redhat.sh SysV, который уже поставляется с выпуском JBoss 5.1.0.GA? Я использую его в нескольких системах RHEL и CentOS, и у меня нет абсолютно никаких проблем с запуском JBoss при перезагрузке.

Мне нужно было сделать небольшое изменение, чтобы он справился chkconfig без проблем. Это изменение заключалось в следующем в верхней части скрипта:

--- bin/jboss_init_redhat.sh    2009-05-22 11:01:22.000000000 -0400
+++ /etc/rc.d/init.d/jboss  2009-06-07 22:05:17.000000000 -0400
@@ -4,6 +4,10 @@
 #
 # JBoss Control Script
 #
+# chkconfig: - 85 15
+# description: JBoss Application Server
+# processname: jboss
+
 # To use this script run it as root - it will switch to the specified user
 #
 # Here is a little (and extremely primitive) startup/shutdown script

Затем я просто скопировал его в /etc/rc.d/init.d как jboss и побежал chkconfig --add jboss. Вы можете проверить его активность с помощью chkconfig --list jboss и убедитесь, что он установлен на на для нужных вам уровней запуска, обычно 2-5, которые он активирует.

По какой-то причине Red Hat's JBoss 5.1 EAP распространение отсутствует bin / jboss_init_redhat.sh, хотя есть версии HPUX и Solaris, что немного сбивает с толку дистрибутив Red Hat.

Я тщательно задокументировал процедуры установки демона здесь ... http://www.forwardslashbin.com/?p=108

Предоставленный сценарий инициализации довольно ужасен и не очень надежен.

Я создал альтернативный сценарий инициализации, который должен быть более надежным: https://jira.jboss.org/jira/browse/JBPAPP-3194

Любые отзывы приветствуются!

Удалите eval из начальной строки. Также установите JBOSS_CONSOLE, чтобы он не перенаправлял все ошибки в / dev / null.

Вам нужно будет добавить пользователя jboss для правильной работы. Согласно приведенному выше сценарию, он будет называться «jboss» (без кавычек).

[root@destination-host ~]# /usr/sbin/useradd jboss

Единственный способ запустить скрипт от имени пользователя root - это быть пользователем root при его запуске или через sudo. Я бы настоятельно не рекомендовал запускать JBoss как таковой с правами root.

Выполняя и работая над одним и тем же требованием, я пришел к очень коротким изменениям.

#! / bin / sh

# chkconfig: 345 90 10
# description: Запускает сервер приложений JBoss 5
# имя процесса: jboss # файл pid: /var/run/jboss_m2i.pid

1 - Вышеуказанные пункты сделаны для служебной программы chkconfig.

# $ Id: jboss_init_redhat.sh 81068 2008-11-14 15: 14: 35Z dimitris@jboss.org $ # JBoss Control Script # Чтобы использовать этот скрипт, запустите его как root - он переключится на указанного пользователя # Вот немного (и чрезвычайно примитивный) сценарий запуска / выключения # для систем RedHat. Предполагается, что JBoss находится в / usr / local / jboss, # он запускается пользователем jboss, а двоичные файлы JDK находятся в / usr / local / jdk / bin. # Все это можно изменить в самом скрипте. # # Либо измените этот сценарий в соответствии с вашими требованиями, либо просто убедитесь, что # следующие переменные установлены правильно перед вызовом сценария.

#define where jboss - это каталог, содержащий каталоги log, bin, conf и т. д. 2 - Здесь вы должны указать домашнее местоположение вашего jboss-сервера. JBOSS_HOME = $ {JBOSS_HOME: - "/ home / jboss_user / servers / jboss / jboss-5.1.0.GA"}

3-я третья точка модификации

# определите пользователя, под которым будет запускаться jboss, или используйте 'RUNASIS' для запуска от имени текущего пользователя JBOSS_USER = $ {JBOSS_USER: - "jboss_user"}

# убедитесь, что java находится на вашем пути JAVAPTH = $ {JAVAPTH: - "/ usr / java / jdk1.7.0_04 / bin"}

4 - Точка 4, где указан профиль сервера # конфигурация для использования, обычно одна из 'минимальная', 'по умолчанию', 'все', 'тестовая' JBOSS_CONF = $ {JBOSS_CONF: - "test"}

5 - пункт 5, где указывается адрес привязки. Этот момент очень важен, если вы назначите ему 0.0.0.0, будет возбуждено исключение rmi / jndi.

# если указан JBOSS_HOST, используйте -b для привязки служб jboss к этому адресу JBOSS_BIND_ADDR = $ {JBOSS_HOST: - "10.168.1.10"}

6 - Переменные пункта 6, которые должны быть определены для выключения сервера. здесь 1299 зависит от изменения смещения вашего порта в вашей конфигурации привязки $ JBOSS_HOME / server / server_def_profile / conf / bindingservice.beans / META-INF / bindings-jboss-beans.xml 6.0, это можно проверить командой - netstat

# порт для службы JNDI для JBoss (используется для выключения) JBOSS_JNP_PORT = $ {JBOSS_JNP_PORT: - "1299"} JBOSS_ADMIN_USER = $ {JMX_USER: - "admin"} JBOSS_ADMIN_PWD = $ {JMX_PWD: - "admin"

# определить путь к классу для класса выключения JBOSSCP = $ {JBOSSCP: - "$ JBOSS_HOME / bin / shutdown.jar: $ JBOSS_HOME / client / jnet.jar"}

7. Пункт 7 модификации. в запущенном скрипте. Это отличается от стандартного распределения.

# определить скрипт для запуска jboss JBOSSSH = $ {JBOSSSH: - "$ JBOSS_HOME / bin / run.sh -c $ JBOSS_CONF -b $ JBOSS_BIND_ADDR"}

если ["$ JBOSS_USER" = "RUNASIS"]; затем SUBIT = "" else SUBIT = "su - $ JBOSS_USER -c" fi

если [-n "$ JBOSS_CONSOLE" -a! -d "$ JBOSS_CONSOLE"]; then # убедитесь, что файл существует touch $ JBOSS_CONSOLE if [! -z "$ SUBIT"]; затем выберите $ JBOSS_USER $ JBOSS_CONSOLE fi fi

если [-n "$ JBOSS_CONSOLE" -a! -f "$ JBOSS_CONSOLE"]; затем echo "ПРЕДУПРЕЖДЕНИЕ: недопустимое место для сохранения журнала консоли: $ JBOSS_CONSOLE" echo "ПРЕДУПРЕЖДЕНИЕ: игнорирование и использование / dev / null" JBOSS_CONSOLE = "/ dev / null" fi

#define, что будет делать с журналом консоли JBOSS_CONSOLE = $ {JBOSS_CONSOLE: - "/ dev / null"}

JBOSS_CMD_START = "cd $ JBOSS_HOME / bin; $ JBOSSSH"

8 - Пункт 8, одна из основных модификаций выключения сервера с помощью служебной команды.

JBOSS_CMD_STOP = $ {JBOSS_CMD_STOP: - "java -classpath $ JBOSSCP org.jboss.Shutdown --shutdown \ -s jnp: // $ JBOSS_BIND_ADDR: $ JBOSS_JNP_PORT \ -u $ JBOSS_ADMIN" $ -U $ JBOSS_ADMIN "-u $ JBOSS_ADMIN" -U $ JBOSS_ADMIN "-U $ JBOSS_ADMIN" -U $ JBOSS_ADMIN "если J_WOSSER_ADMIN" -echo $PATH | grep $JAVAPTH"]; затем экспортировать PATH = $ PATH: $ JAVAPTH fi

если [ ! -d "$ JBOSS_HOME"]; тогда echo JBOSS_HOME не существует как допустимый каталог: $ JBOSS_HOME exit 1 fi

эхо JBOSS_CMD_START = $ JBOSS_CMD_START

регистр "$ 1" в начале) cd $ JBOSS_HOME / bin if [-z "$ SUBIT"]; затем eval $ JBOSS_CMD_START> $ {JBOSS_CONSOLE} 2> & 1 & else $ SUBIT "$ JBOSS_CMD_START> $ {JBOSS_CONSOLE} 2> & 1 &" fi ;; стоп) если [-z "$ SUBIT"]; затем $ JBOSS_CMD_STOP else $ SUBIT "$ JBOSS_CMD_STOP" fi ;; перезапуск) $ 0 стоп $ 0 старт ;; *) echo "использование: $ 0 (start | stop | restart | help)" esac

Используйте следующую команду, чтобы добавить этот скрипт в службу chkconfig и протестировать

chkconfig --add jboss - добавить

chkconfig --list jboss - в список

Используйте следующую команду для запуска и остановки служб.

запуск службы jboss

остановка службы jboss