在Linux上启动JBoss 7作为服务

以前的JBoss版本包含一个脚本(如jboss_init_redhat.sh ),可以将其复制到/etc/init.d中,以便将其作为服务添加 – 所以它将在启动时启动。 我似乎无法在JBoss 7中find类似的脚本。有没有人已经做过这样的事情?

PS我试图在Ubuntu 10.04中实现这一点

花了几个小时的探听之后,我最终创build了具有以下内容的/etc/init.d/jboss

 #!/bin/sh ### BEGIN INIT INFO # Provides: jboss # Required-Start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/Stop JBoss AS v7.0.0 ### END INIT INFO # #source some script files in order to set and export environmental variables #as well as add the appropriate executables to $PATH [ -r /etc/profile.d/java.sh ] && . /etc/profile.d/java.sh [ -r /etc/profile.d/jboss.sh ] && . /etc/profile.d/jboss.sh case "$1" in start) echo "Starting JBoss AS 7.0.0" #original: #sudo -u jboss sh ${JBOSS_HOME}/bin/standalone.sh #updated: start-stop-daemon --start --quiet --background --chuid jboss --exec ${JBOSS_HOME}/bin/standalone.sh ;; stop) echo "Stopping JBoss AS 7.0.0" #original: #sudo -u jboss sh ${JBOSS_HOME}/bin/jboss-admin.sh --connect command=:shutdown #updated: start-stop-daemon --start --quiet --background --chuid jboss --exec ${JBOSS_HOME}/bin/jboss-admin.sh -- --connect command=:shutdown ;; *) echo "Usage: /etc/init.d/jboss {start|stop}" exit 1 ;; esac exit 0 

这里是java.sh的内容:

 export JAVA_HOME=/usr/lib/jvm/java_current export PATH=$JAVA_HOME/bin:$PATH 

jboss.sh

 export JBOSS_HOME=/opt/jboss/as/jboss_current export PATH=$JBOSS_HOME/bin:$PATH 

显然,你需要确保你设置了适合你的环境的JAVA_HOME和JBOSS_HOME。

那么我运行sudo update-rc.d jboss defaults这样JBoss自动启动系统启动

我发现这篇文章有助于创build上面的启动脚本。 再次,上面的脚本是Ubuntu的(在我的情况下是10.04版),所以在Fedora / RedHat或者CentOS中使用它可能不起作用(注释中的设置完全不同)。

我还在Ubuntu 10.04 LTS的脚本中做了一个尝试。 JBoss版本是7.1.1。 我想要一个真正testing成功的JBoss启动的脚本,能够相对优雅地closuresJBoss。 我的起点是包含在JBoss 7.1.1下载的bin / init.d目录中的JBoss脚本。 我用这个页面上的其他脚本以及其他的Ubuntu init脚本来调整它。 请注意,Ubuntu使用破折号作为默认的init脚本解释器,而不是JBoss脚本显然期望的bash。 中等重要的是logging发生在/var/log/jboss-as而不是${JBOSS_HOME}/standalone/log 。 日志也被用来确定JBoss是否成功启动。

jboss-as-standalone.sh

 #!/bin/sh # # JBoss standalone control script # # Provided in JBoss AS 7.1.1 # Modified for Ubuntu Server 10.04 by koma # # chkconfig: - 80 20 # description: JBoss AS Standalone # processname: standalone # pidfile: /var/run/jboss-as/jboss-as-standalone.pid # config: /etc/default/jboss-as # ### BEGIN INIT INFO # Provides: jboss-as # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start JBoss AS # Description: Start JBoss Application Server. ### END INIT INFO # # Inspired by tomcat6 init script, might be somewhat redundant #PATH=??? NAME=jboss-as DESC="JBoss AS" DEFAULT=/etc/default/$NAME # Source function library. #. /etc/init.d/functions # Ubuntu has it here (but probably different !) . /lib/lsb/init-functions # Load Java configuration. # Ubuntu has it in /etc/default [ -r /etc/default/java ] && . /etc/default/java export JAVA_HOME # Load JBoss AS init.d configuration. if [ -z "$JBOSS_CONF" ]; then # Ubuntu: seems more logical there JBOSS_CONF="/etc/default/jboss-as" fi [ -r "$JBOSS_CONF" ] && . "${JBOSS_CONF}" # Set defaults. if [ -z "$JBOSS_HOME" ]; then JBOSS_HOME="/var/local/jboss-as" fi export JBOSS_HOME # might be unbeautiful # this made chown fail because JBOSS_USER was empty if [ -z "$JBOSS_USER" ]; then JBOSS_USER="jboss" fi export JBOSS_USER if [ -z "$JBOSS_PIDFILE" ]; then JBOSS_PIDFILE=/var/run/jboss-as/jboss-as-standalone.pid fi export JBOSS_PIDFILE #if [ -z "$JBOSS_CONSOLE_LOG" ]; then # JBOSS_CONSOLE_LOG=/var/log/jboss-as/console.log #fi # use JBOSS_LOG_DIR from jboss script instead if [ -z "$JBOSS_LOG_DIR" ]; then JBOSS_LOG_DIR=/var/log/jboss-as fi export JBOSS_LOG_DIR # We need this to be set to get a pidfile ! if [ -z "$LAUNCH_JBOSS_IN_BACKGROUND" ]; then LAUNCH_JBOSS_IN_BACKGROUND=true fi export LAUNCH_JBOSS_IN_BACKGROUND if [ -z "$STARTUP_WAIT" ]; then STARTUP_WAIT=120 fi if [ -z "$SHUTDOWN_WAIT" ]; then SHUTDOWN_WAIT=120 fi if [ -z "$JBOSS_CONFIG" ]; then JBOSS_CONFIG=standalone.xml fi JBOSS_SCRIPT=$JBOSS_HOME/bin/standalone.sh prog='jboss-as' start() { log_daemon_msg "Starting $DESC" id $JBOSS_USER > /dev/null 2>&1 if [ $? -ne 0 -o -z "$JBOSS_USER" ]; then log_failure_msg "User $JBOSS_USER does not exist..." log_end_msg 1 exit 1 fi if [ -f $JBOSS_PIDFILE ]; then read ppid < $JBOSS_PIDFILE if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then log_progress_msg "$prog is already running" log_end_msg 0 exit 0 else rm -f $JBOSS_PIDFILE fi fi mkdir -p $JBOSS_LOG_DIR # not sure: clear boot.log ... dunno if good, dunno if hardcoding boot.log good cat /dev/null > ${JBOSS_LOG_DIR}"/boot.log" # same as for boot.log, but we need to clear server.log to get proper launch detection (grepping later) cat /dev/null > ${JBOSS_LOG_DIR}"/server.log" chown -R ${JBOSS_USER}: $JBOSS_LOG_DIR mkdir -p $(dirname $JBOSS_PIDFILE) chown ${JBOSS_USER}: $(dirname $JBOSS_PIDFILE) || true if [ ! -z "$JBOSS_USER" ]; then start-stop-daemon --start -b -u "$JBOSS_USER" -c "$JBOSS_USER" -d "$JBOSS_HOME" -p "$JBOSS_PIDFILE" -x ${JBOSS_HOME}/"bin/standalone.sh" -- -Djboss.server.log.dir="$JBOSS_LOG_DIR" else log_failure_msg "Error: Environment variable JBOSS_USER not set or empty." log_end_msg 1 exit 1 fi count=0 launched=false until [ $count -gt $STARTUP_WAIT ] do grep 'JBoss AS.*started in' ${JBOSS_LOG_DIR}"/server.log" > /dev/null if [ $? -eq 0 ] ; then launched=true break fi sleep 1 count=$((count+1)); done if [ $launched=true ]; then if [ -f $JBOSS_PIDFILE ] && [ -s $JBOSS_PIDFILE ]; then log_progress_msg "Successfully started $DESC." else log_progress_msg "Successfully started $DESC, but problems with pidfile." fi else log_failure_msg "Launching $DESC failed." # If the pidfile exists, try to kill the process if [ -f $JBOSS_PIDFILE ] && [ -s $JBOSS_PIDFILE ]; then read kpid < $JBOSS_PIDFILE log_progress_msg "Pidfile detected. Please take care of process $kpid manually." fi log_end_msg 1 exit 1 fi # success log_end_msg 0 return 0 } stop() { log_daemon_msg "Stopping $DESC" count=0; if [ -f $JBOSS_PIDFILE ]; then read kpid < $JBOSS_PIDFILE kwait=$SHUTDOWN_WAIT # Try issuing SIGTERM kill -15 $kpid until [ `ps --pid $kpid 2> /dev/null | grep -c $kpid 2> /dev/null` -eq '0' ] || [ $count -gt $kwait ] do sleep 1 count=$((count+1)); done if [ $count -gt $kwait ]; then kill -9 $kpid fi fi rm -f $JBOSS_PIDFILE log_end_msg 0 return 0 } status() { if [ -f $JBOSS_PIDFILE ]; then read ppid < $JBOSS_PIDFILE if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then log_success_msg "$prog is running (pid $ppid)" exit 0 else log_success_msg "$prog dead but pid file exists" exit 1 fi fi log_success_msg "$prog is not running" exit 3 } reload() { log_begin_msg "Reloading $prog ..." start-stop-daemon --start --quiet --background --chuid jboss --exec ${JBOSS_HOME}/bin/jboss-cli.sh -- --connect command=:reload log_end_msg $? exit $? } case "$1" in start) start ;; stop) stop ;; restart) $0 stop $0 start ;; status) status ;; reload) reload ;; *) ## If no parameters are given, print which are avaiable. echo "Usage: $0 {start|stop|status|restart|reload}" exit 1 ;; esac 

和随附的configuration(把它放在/ etc / default / jboss-as):

 # JBoss AS configuration JBOSS_HOME="/var/local/jboss-as" JBOSS_USER=jboss 

什么工作(命令,链接脚本从/etc/init.d/jboss-as后使用sudo service jboss-as <command> ):

  • 启动(阻塞直到服务器成功启动)
  • 停止(也阻止)
  • 重新开始
  • 状态

什么没有testing:

  • 如果重新加载正常工作
  • 如果JBoss失败会发生什么
  • 其他几个可能会发生什么失败

我还没有深入几个主题,特别是:

  • set + e / set -e是做什么的,是否需要(在其他脚本中使用)
  • 什么是日志_ * _味精function的语义和应该在哪里使用
  • 如何正确执行日志logging(将位置传递给JBoss)
  • 如果jboss-cli.sh脚本可以并应该用于更多的事情(如启动/运行检测)
  • 如果真的有必要将standalone.sh作为一个进程始终运行
  • 如果返回值是适当的

请注意,我绝对不是shell脚本大师 – 我非常无能。 所以,如果你在代码中发现任何愚蠢的行为,或者有任何改进的想法,我会很高兴听到他们的声音。

最近我为JBoss AS 7编写了安装程序,它从RedHat的服务器上下载tar.gz文件,解压缩,添加jboss-作为服务,并进行一些非常基本的configuration。 有了它,我准备在几秒钟内使用JBoss AS 7。

安装脚本:

 #!/bin/bash #title :jboss-install.sh #description :The script to install JBoss AS 7.x #author :Dmitriy Sukharev #date :20130106 #usage :/bin/bash jboss-install.sh JBOSS_AS_FILENAME=jboss-as-7.1.1.Final JBOSS_AS_ARCHIVE_NAME=$JBOSS_AS_FILENAME.tar.gz JBOSS_AS_DOWNLOAD_ADDRESS=http://download.jboss.org/jbossas/7.1/$JBOSS_AS_FILENAME/$JBOSS_AS_ARCHIVE_NAME INSTALL_DIR=/opt JBOSS_AS_FULL_DIR=$INSTALL_DIR/$JBOSS_AS_FILENAME JBOSS_AS_DIR=$INSTALL_DIR/jboss-as JBOSS_AS_USER="jboss-as" JBOSS_AS_SERVICE="jboss-as" JBOSS_AS_STARTUP_TIMEOUT=240 SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" echo "Cleaning up..." rm "$JBOSS_AS_ARCHIVE_NAME" rm "$JBOSS_AS_DIR" rm -r "$JBOSS_AS_FULL_DIR" rm -r "/var/run/$JBOSS_AS_SERVICE/" rm /etc/init.d/$JBOSS_AS_SERVICE echo "Installation..." wget $JBOSS_AS_DOWNLOAD_ADDRESS mkdir $JBOSS_AS_FULL_DIR tar -xzf $JBOSS_AS_ARCHIVE_NAME -C $INSTALL_DIR ln -s $JBOSS_AS_FULL_DIR/ $JBOSS_AS_DIR useradd -s /sbin/nologin $JBOSS_AS_USER chown -R $JBOSS_AS_USER:$JBOSS_AS_USER $JBOSS_AS_DIR chown -R $JBOSS_AS_USER:$JBOSS_AS_USER $JBOSS_AS_DIR/ rm $JBOSS_AS_ARCHIVE_NAME echo "Registrating JBoss as service..." sed -e 's,${JBOSS_AS_USER},'$JBOSS_AS_USER',g; s,${JBOSS_AS_FILENAME},'$JBOSS_AS_FILENAME',g; s,${JBOSS_AS_SERVICE},'$JBOSS_AS_SERVICE',g; s,${JBOSS_AS_DIR},'$JBOSS_AS_DIR',g' $SCRIPT_DIR/jboss-as.template > /etc/init.d/$JBOSS_AS_SERVICE chmod 755 /etc/init.d/$JBOSS_AS_SERVICE echo "Configurating..." sed -i -e 's,<deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000"/>,<deployment-scanner path="deployments" relative-to="jboss.server.base.dir" scan-interval="5000" deployment-timeout="'$JBOSS_AS_STARTUP_TIMEOUT'"/>,g' $JBOSS_AS_DIR/standalone/configuration/standalone.xml sed -i -e 's,<virtual-server name="default-host" enable-welcome-root="true">,<virtual-server name="default-host" enable-welcome-root="false">,g' $JBOSS_AS_DIR/standalone/configuration/standalone.xml sed -i -e 's,<inet-address value="${jboss.bind.address:127.0.0.1}"/>,<any-address/>,g' $JBOSS_AS_DIR/standalone/configuration/standalone.xml sed -i -e 's,<socket-binding name="ajp" port="8009"/>,<socket-binding name="ajp" port="28009"/>,g' $JBOSS_AS_DIR/standalone/configuration/standalone.xml sed -i -e 's,<socket-binding name="http" port="8080"/>,<socket-binding name="http" port="28080"/>,g' $JBOSS_AS_DIR/standalone/configuration/standalone.xml sed -i -e 's,<socket-binding name="https" port="8443"/>,<socket-binding name="https" port="28443"/>,g' $JBOSS_AS_DIR/standalone/configuration/standalone.xml sed -i -e 's,<socket-binding name="osgi-http" interface="management" port="8090"/>,<socket-binding name="osgi-http" interface="management" port="28090"/>,g' $JBOSS_AS_DIR/standalone/configuration/standalone.xml echo "Done." 

初始脚本:

 #!/bin/sh ### BEGIN INIT INFO # Provides: ${JBOSS_AS_SERVICE} # Required-Start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/Stop ${JBOSS_AS_FILENAME} ### END INIT INFO JBOSS_USER=${JBOSS_AS_USER} JBOSS_DIR=${JBOSS_AS_DIR} case "$1" in start) echo "Starting ${JBOSS_AS_FILENAME}..." start-stop-daemon --start --background --chuid $JBOSS_USER --exec $JBOSS_DIR/bin/standalone.sh exit $? ;; stop) echo "Stopping ${JBOSS_AS_FILENAME}..." start-stop-daemon --start --quiet --background --chuid $JBOSS_USER --exec $JBOSS_DIR/bin/jboss-cli.sh -- --connect command=:shutdown exit $? ;; log) echo "Showing server.log..." tail -500f $JBOSS_DIR/standalone/log/server.log ;; *) echo "Usage: /etc/init.d/jboss-as {start|stop}" exit 1 ;; esac exit 0 

我在我的博客文章中描述了脚本步骤。 它也有链接来下载这个脚本文件作为档案。

 #! /bin/sh start(){ echo "Starting JBoss 7" sudo -u jboss sh /usr/local/jboss/bin/standalone.sh } stop(){ echo "Stopping JBoss 7" sudo -u jboss sh /usr/local/jboss/bin/jboss-admin.sh --connect command=:shutdown } restart(){ stop # give stuff some time to stop before we restart sleep 60 # protect against any services that can't stop before we restart su -l jboss -c 'killall java' start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo "Usage: jboss {start|stop|restart}" exit 1 ;; esac exit 0 

监视bin目录下你有init.d / jboss-as-standalone.sh(jboss-as-7.1.0.CR1b)

在这里标记为正确的答案不适用于我。 在重新启动时,你会得到与sudo使用相关的安全错误,指出:“对不起,你必须有一个tty才能运行sudo”。 进一步的研究显示,禁用sudo tty限制可能导致密码的明文暴露,所以这是不好的。

这就是我最终的结果,对我来说工作得很好:

 #!/bin/sh ### BEGIN INIT INFO # Provides: jboss # Required-Start: $local_fs $remote_fs $network $syslog # Required-Stop: $local_fs $remote_fs $network $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/Stop JBoss AS v7.0.0 ### END INIT INFO # #source some script files in order to set and export environmental variables #as well as add the appropriate executables to $PATH [ -r /etc/profile.d/java.sh ] && . /etc/profile.d/java.sh [ -r /etc/profile.d/jboss.sh ] && . /etc/profile.d/jboss.sh case "$1" in start) echo "Starting JBoss AS 7.0.0" su --session-command "${JBOSS_HOME}/bin/standalone.sh >& /dev/null &" jboss ;; stop) echo "Stopping JBoss AS 7.0.0" su --session-command "${JBOSS_HOME}/bin/jboss-admin.sh --connect command=:shutdown" jboss ;; *) echo "Usage: /etc/init.d/jboss {start|stop}" exit 1 ;; esac exit 0 

今天晚上刚刚战斗,我想分享我的发现。 最后,我按照这里的安装说明: http : //ptoconnor.wordpress.com/2012/11/19/jboss-as-7-1-1-on-an-ubuntu-12-04-aws-instance- running-oracle-java-7 /有一些改动;

我安装到/ usr / share不是/ opt

为了让jboss作为一个服务来运行,我创build了一个符号链接到redhat / centos友好/usr/share/jboss-as-7.1.1.Final/bin/init.d/jboss-as-standalone.sh这是随7.1.1最终版本提供

 sudo ln -s /usr/share/jboss-as-7.1.1.Final/bin/init.d/jboss-as-standalone.sh /etc/init.d/jboss 

然后进行一些更改,使其友好的Ubuntu

 #!/bin/sh # # JBoss standalone control script # # chkconfig: - 80 20 # description: JBoss AS Standalone # processname: standalone # pidfile: /var/run/jboss-as/jboss-as-standalone.pid # config: /etc/jboss-as/jboss-as.conf # Source function library. . /lib/lsb/init-functions # Load Java configuration. [ -r /etc/java/java.conf ] && . /etc/java/java.conf export JAVA_HOME # Load JBoss AS init.d configuration. if [ -z "$JBOSS_CONF" ]; then JBOSS_CONF="/etc/jboss-as/jboss-as.conf" fi [ -r "$JBOSS_CONF" ] && . "${JBOSS_CONF}" # Set defaults. if [ -z "$JBOSS_HOME" ]; then JBOSS_HOME=/usr/share/jboss-as fi export JBOSS_HOME if [ -z "$JBOSS_PIDFILE" ]; then JBOSS_PIDFILE=/var/run/jboss-as/jboss-as-standalone.pid fi export JBOSS_PIDFILE if [ -z "$JBOSS_CONSOLE_LOG" ]; then JBOSS_CONSOLE_LOG=/var/log/jboss-as/console.log fi if [ -z "$STARTUP_WAIT" ]; then STARTUP_WAIT=30 fi if [ -z "$SHUTDOWN_WAIT" ]; then SHUTDOWN_WAIT=30 fi if [ -z "$JBOSS_CONFIG" ]; then JBOSS_CONFIG=standalone.xml fi JBOSS_SCRIPT=$JBOSS_HOME/bin/standalone.sh prog='jboss-as' CMD_PREFIX='' JBOSS_USER=jboss if [ ! -z "$JBOSS_USER" ]; then if [ -x /lib/lsb/init-functions ]; then CMD_PREFIX="start-stop-daemon -user $JBOSS_USER" else CMD_PREFIX="su - $JBOSS_USER -c" fi fi start() { echo -n "Starting $prog: " if [ -f $JBOSS_PIDFILE ]; then read ppid < $JBOSS_PIDFILE; if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then echo -n "$prog is already running" failure echo return 1 else rm -f $JBOSS_PIDFILE fi fi mkdir -p $(dirname $JBOSS_CONSOLE_LOG) cat /dev/null > $JBOSS_CONSOLE_LOG mkdir -p $(dirname $JBOSS_PIDFILE) chown $JBOSS_USER $(dirname $JBOSS_PIDFILE) || true #$CMD_PREFIX JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT 2>&1 > $JBOSS_CONSOLE_LOG & #$CMD_PREFIX JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT & if [ ! -z "$JBOSS_USER" ]; then if [ -x /lib/lsb/init-functions ]; then start-stop-daemon -user $JBOSS_USER LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG 2>&1 > $JBOSS_CONSOLE_LOG & else su - $JBOSS_USER -c "LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE=$JBOSS_PIDFILE $JBOSS_SCRIPT -c $JBOSS_CONFIG" 2>&1 > $JBOSS_CONSOLE_LOG & fi fi count=0 launched=false until [ $count -gt $STARTUP_WAIT ] do grep 'JBoss AS.*started in' $JBOSS_CONSOLE_LOG > /dev/null if [ $? -eq 0 ] ; then launched=true break fi sleep 1; count=`expr $count + 1` done printf success echo return 0 } stop() { echo -n "Stopping $prog: " count=0; if [ -f $JBOSS_PIDFILE ]; then read kpid < $JBOSS_PIDFILE; kwait=$SHUTDOWN_WAIT # Try issuing SIGTERM kill -15 $kpid until [ `ps --pid $kpid 2> /dev/null | grep -c $kpid 2> /dev/null` -eq '0' ] || [ $count -gt $kwait ] do sleep 1; count=`expr $count + 1` done if [ $count -gt $kwait ]; then kill -9 $kpid fi fi rm -f $JBOSS_PIDFILE printf success echo } status() { if [ -f $JBOSS_PIDFILE ]; then read ppid < $JBOSS_PIDFILE if [ `ps --pid $ppid 2> /dev/null | grep -c $ppid 2> /dev/null` -eq '1' ]; then echo "$prog is running (pid $ppid)" return 0 else echo "$prog dead but pid file exists" return 1 fi fi echo "$prog is not running" return 3 } case "$1" in start) start ;; stop) stop ;; restart) $0 stop $0 start ;; status) status ;; *) ## If no parameters are given, print which are avaiable. echo "Usage: $0 {start|stop|status|restart|reload}" exit 1 ;; esac 

现在只是使用上面的脚本安装jboss服务的情况。

 sudo update-rc.d jboss defaults 

我知道现在有很多变化,但希望这将有助于下一个人search。 我只想要一个JBPM主机…

这是我的gentoo。 不完美,但很干净,对我来说工作得不错。 对jboss安装的第一个小改动是:

 ~ # JBOSS_HOME=/opt/jboss # or whatever you have it as ~ # echo "LAUNCH_JBOSS_IN_BACKGROUND=true" >> "${JBOSS_HOME}"/bin/standalone.conf 

 ~ # cat /etc/conf.d/jboss JBOSS_HOME=/opt/jboss JBOSS_USER=jboss JBOSS_PIDFILE=/var/run/jboss/jboss.pid JBOSS_EXECUTABLE="${JBOSS_HOME}"/bin/standalone.sh JBOSS_STDOUT_LOG=/var/log/jboss/stdout.log JBOSS_STDERR_LOG=/var/log/jboss/stderr.log JBOSS_SHUTDOWN_WAIT_SECONDS=60 

 ~ # cat /etc/init.d/jboss #!/sbin/runscript depend() { need net } start() { ebegin "Starting JBoss" start-stop-daemon -S -b -m -p "${JBOSS_PIDFILE}" -u "${JBOSS_USER}" -x "${JBOSS_EXECUTABLE}" -1 "${JBOSS_STDOUT_LOG}" -2 "${JBOSS_STDERR_LOG}" eend $? } stop() { ebegin "Stopping JBoss" start-stop-daemon -K -p "${JBOSS_PIDFILE}" -u "${JBOSS_USER}" -R ${JBOSS_SHUTDOWN_WAIT_SECONDS} eend $? } 

部署完成后,我无法启动说[确定]。 我已经尝试了一些东西,但没有运气 – 它要么永远等待,要么只是在shell脚本分支后马上说[确定]。 只要你设置足够长的时间,停止就更好了。 日志旋转将很容易添加

jboss发行版中有一个目录位于bin / init.d中,并带有一个shell脚本,可以放在init.d中作为服务启动jboss。 该脚本被称为jboss-as-standalone.sh

我发现这里没有任何解决scheme真的在工作…(至less对于Ubuntu 12.04 LTS)

所以我做了自己的一个(可以启动JBoss并等待它完成,并使用start-stop-daemon utils来停止它):

 #!/bin/bash # # JBoss standalone control script # # Based on the file provided in JBoss AS 7.1.1 (https://github.com/jbossas/jboss-as/blob/master/build/src/main/resources/bin/init.d/jboss-as-standalone.sh) # inspired by http://stackoverflow.com/questions/6880902/start-jboss-7-as-a-service-on-linux and http://ptoconnor.wordpress.com/2012/11/19/jboss-as-7-1-1-on-an-ubuntu-12-04-aws-instance-running-oracle-java-7/ # Modified for Ubuntu Server 12.04 by Anthony O. # # chkconfig: - 80 20 # description: JBoss AS Standalone # config: /etc/default/jboss-as-7 # ### BEGIN INIT INFO # Provides: jboss-as # Required-Start: $local_fs $remote_fs $network # Required-Stop: $local_fs $remote_fs $network # Should-Start: $named # Should-Stop: $named # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start JBoss AS # Description: Start JBoss Application Server. ### END INIT INFO # JBOSS_CONF="/opt/jboss-as-7/bin/init.d/jboss-as.conf" NAME=jboss-as-7 DEFAULT=/etc/default/$NAME # Source function library. . /lib/lsb/init-functions # Load Java configuration. # Ubuntu has it in /etc/default [ -r /etc/default/java ] && . /etc/default/java export JAVA_HOME # Load JBoss AS init.d configuration. if [ -z "$JBOSS_CONF" ]; then JBOSS_CONF=$DEFAULT fi [ -r "$JBOSS_CONF" ] && . "${JBOSS_CONF}" # Set defaults. if [ -z "$JBOSS_HOME" ]; then JBOSS_HOME="/var/local/$NAME" fi export JBOSS_HOME if [ -z "$JBOSS_USER" ]; then JBOSS_USER="jboss" fi export JBOSS_USER if [ -z "$JBOSS_PIDFILE" ]; then JBOSS_PIDFILE=/var/run/$NAME/jboss-as-standalone.pid fi export JBOSS_PIDFILE if [ -z "$JBOSS_CONSOLE_LOG" ]; then JBOSS_CONSOLE_LOG=/var/log/$NAME/console.log fi # We need this to be set to get a pidfile ! if [ -z "$LAUNCH_JBOSS_IN_BACKGROUND" ]; then LAUNCH_JBOSS_IN_BACKGROUND=true fi export LAUNCH_JBOSS_IN_BACKGROUND if [ -z "$STARTUP_WAIT" ]; then STARTUP_WAIT=120 fi if [ -z "$SHUTDOWN_WAIT" ]; then SHUTDOWN_WAIT=120 fi if [ -z "$JBOSS_CONFIG" ]; then JBOSS_CONFIG=standalone.xml fi JBOSS_SCRIPT=$JBOSS_HOME/bin/standalone.sh MATCHING_ARGS=(--user "$JBOSS_USER" --pidfile "$JBOSS_PIDFILE") start() { log_daemon_msg "Starting $NAME" id $JBOSS_USER > /dev/null 2>&1 if [ $? -ne 0 -o -z "$JBOSS_USER" ]; then log_failure_msg "User $JBOSS_USER does not exist..." log_end_msg 1 exit 1 fi mkdir -p $(dirname $JBOSS_CONSOLE_LOG) cat /dev/null > $JBOSS_CONSOLE_LOG chown $JBOSS_USER $JBOSS_CONSOLE_LOG mkdir -p $(dirname $JBOSS_PIDFILE) chown ${JBOSS_USER}: $(dirname $JBOSS_PIDFILE) || true if [ ! -z "$JBOSS_USER" ]; then start-stop-daemon --start ${MATCHING_ARGS[@]} --oknodo --chuid "$JBOSS_USER" --chdir "$JBOSS_HOME" --retry $STARTUP_WAIT $(if [ "$LAUNCH_JBOSS_IN_BACKGROUND" == "true" ] ; then echo "--background" ; fi) --startas /bin/bash -- -c "exec $JBOSS_SCRIPT -c $JBOSS_CONFIG 2>&1 > $JBOSS_CONSOLE_LOG" else log_failure_msg "Error: Environment variable JBOSS_USER not set or empty." log_end_msg 1 exit 1 fi if [ "$LAUNCH_JBOSS_IN_BACKGROUND" == "true" ] ; then count=0 launched_status=1 until [ $count -gt $STARTUP_WAIT ] do grep 'JBAS015874:' $JBOSS_CONSOLE_LOG > /dev/null if [ $? -eq 0 ] ; then launched_status=0 break fi sleep 1 let count=$count+1; done log_end_msg $launched_status return $launched_status else log_end_msg $? return $? fi } stop() { log_daemon_msg "Stopping $NAME" END_STATUS=0 if [ -f $JBOSS_PIDFILE ]; then start-stop-daemon --stop ${MATCHING_ARGS[@]} --retry $SHUTDOWN_WAIT END_STATUS=$? rm -f $JBOSS_PIDFILE fi log_end_msg $END_STATUS return $END_STATUS } status() { start-stop-daemon --status --verbose ${MATCHING_ARGS[@]} exit $? } reload() { log_begin_msg "Reloading $prog ..." start-stop-daemon --start --quiet --chuid ${JBOSS_USER} --exec ${JBOSS_HOME}/bin/jboss-cli.sh -- --connect command=:reload log_end_msg $? exit $? } case "$1" in start) start ;; stop) stop ;; restart) $0 stop $0 start ;; status) status ;; reload) reload ;; *) ## If no parameters are given, print which are avaiable. echo "Usage: $0 {start|stop|status|restart|reload}" exit 1 ;; esac 

如果jboss-as.conf文件位于/etc/default/jboss-as-7 ,则可以更改文件顶部附近的JBOSS_CONFvariables以及将其删除。

要打印执行的命令的PID,使用shellvariables$ !. 这个variables将打印进程执行的PID。

 case "$1" in start) echo "Starting JBoss AS 7.0.0" su --session-command "${JBOSS_HOME}/bin/standalone.sh >& /dev/null &" jboss echo $! > /tmp/jboss.pid ;; 

在Linux上运行JBoss服务的另一种方法是:

JBoss作为在Linux服务