Я использую 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 --add jboss - добавить
chkconfig --list jboss - в список
запуск службы jboss
остановка службы jboss