在Linux上启动JBoss 7作为服务

问题描述:

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

P.S. 我试图在Ubuntu 10.04

实现这一目标花了几个周围窥探小时后,我结束了创建/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在系统启动

自动启动,我发现this article要在上面创建的启动脚本有用。同样,上面的脚本适用于Ubuntu(在我的情况下为10.04版本),因此在Fedora/RedHat或CentOS中使用它可能不起作用(注释中所做的设置与此不同)。

+0

参见[chkconfig的](http://manpages.ubuntu.com/manpages/maverick/man8/chkconfig。 8.html),'--add'选项。 –

+1

你可以使用这样的结构来导入'jboss.sh'文件:'[-r /etc/profile.d/jboss.sh] && source /etc/profile.d/jboss.sh' –

+0

谢谢你Lukasz的帮助建议! – Andrey

#! /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 

关注下目录你的init.d/jboss-as-standalone.sh(JBoss的-AS-7.1.0.CR1b)

+1

这些脚本与Ubuntu不兼容(至少12.04) –

+0

Anthony O.用户试图在Ubuntu 10.04中运行脚本而不是12.04 ,并且我不能写出一个适用于所有未来发行版的答案:)所以不要低估我,但是jboss团队 –

下面是我为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脚本分支后才说[确定]。只要您将延迟时间设置得足够长,停止会更好。日志旋转将很容易添加

在这里标记为正确的答案不适用于我。在重新启动时,你会得到与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 

有一个在位于斌/ init.d中有一个shell脚本,你可以在init.d下放置JBoss发行目录推出jboss作为服务。该脚本被称为jboss-as-standalone。sh

+0

它在Ubuntu上不能很好地工作。启动脚本非常依赖发行版。 –

+0

这些脚本与Ubuntu不兼容(至少12.04) –

我还在Ubuntu 10.04 LTS的脚本中拍了一张照片。 JBoss版本是7.1.1。我想要一个真正测试成功的JBoss启动的脚本,并且能够相对优雅地关闭JBoss。我的起点是包含在JBoss 7.1.1下载的bin/init.d目录中的JBoss脚本。我对这个页面上的其他脚本以及其他Ubuntu init脚本中的一些内容进行了调整。请注意,Ubuntu使用短划线作为其默认的init脚本解释器,而不是JBoss脚本明显期望的bash。 中等重要的是记录发生在/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 

和伴随的配置(把它在/ etc /默认/的jboss-AS):

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



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

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

什么没有进行测试:

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

我没有深入到几个主题呢,尤其是:

  • 是什么设置+ E /设置-e做(它在其他脚本中使用)
  • 什么是log _ * _ msg函数的语义以及它们应该用在哪里
  • 如何正确执行日志记录(将位置传递给JBoss)
  • 如果jboss-cli.sh脚本可以而且应该被用于更多的东西(如启动/运行检测)
  • 如果它真的需要有standalone.sh运行的过程中所有的时间
  • 如果返回值是合适的

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

+1

在Ubuntu 12.10上,'log_progress_msg'在控制台上没有输出。这导致脚本没有显示问题(在我的情况下与pid文件)。将其更改为'log_action_msg',它将提供更多的输出 –

+2

为了创建pid文件,守护进程服务启动时需要选项'--make-pidfile':start-stop-daemon --start -b -u “$ JBOSS_USER”-c“$ JBOSS_USER”-d“$ JBOSS_HOME”-p“$ JBOSS_PIDFILE”--make-pidfile -x $ {JBOSS_HOME} /“bin/standalone.sh” - -Djboss.server.log。 dir =“$ JBOSS_LOG_DIR” –

+0

“set + e/set -e做了什么并且是否需要(在其他脚本中使用它)” 这将脚本执行设置为'错误退出'模式(因此脚本isn不会持续检查命令返回码)。你想保留“-e”,这样就可以捕捉到启动错误,而不是默默地忽略。 –

最近我为JBoss AS 7编写了安装程序,它从RedHat的服务器下载tar.gz文件,提取它,添加jboss-作为服务并进行一些非常基本的配置。有了它,我准备在几秒钟内使用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 

我描述了我的blog post脚本步骤。它还具有将此脚本文件作为归档文件下载的链接。

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

我安装到/ usr /股而非/ opt

要获得的JBoss作为服务运行,我创建了一个符号链接红帽/ CentOS的友好 /usr/share/jboss-as-7.1。这是提供与7.1.1最终版本1.Final/bin/init.d/jboss-as-standalone.sh

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 

我知道现在有很多变化,但希望这可以帮助下一个人搜索。所有我想要的是一个jBPM的主机...

我发现这里没有任何解决方案,它是真正的工作...(至少为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://*.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_CONF变量以及消除它,如果jboss-as.conf文件位于/etc/default/jboss-as-7

要打印执行的命令的PID使用shell变量$ !.该变量将打印执行的进程的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 as service in linux