web-dev-qa-db-ja.com

LinuxでJBoss 7をサービスとして起動します

以前のバージョンのJBossにはスクリプトが含まれていました(jboss_init_redhat.sh)サービスとして追加するために/etc/init.dにコピーできます-起動時に起動します。 JBoss 7では同様のスクリプトを見つけることができないようです。すでにこのようなことをしている人はいますか?

追伸Ubuntu 10.04でこれを達成しようとしています

35
Andrey

数時間索した後、次の内容の/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が自動的に起動するようにしました

この記事 は、上記の起動スクリプトの作成に役立つことがわかりました。繰り返しになりますが、上記のスクリプトはUbuntu(私の場合はバージョン10.04)用であるため、Fedora/RedHatまたはCentOSで使用することはおそらく機能しません(コメントで行われたセットアップはそれらによって異なります)。

58
Andrey

また、Ubuntu 10.04 LTSのスクリプトも撮影しました。 JBossバージョンは7.1.1です。 JBossの正常な起動を実際にテストし、比較的正常にJBossをシャットダウンできるスクリプトが必要でした。私の出発点は、JBoss 7.1.1ダウンロードのbin/init.dディレクトリに含まれるJBossスクリプトでした。このページの他のスクリプトと他のUbuntu initスクリプトの一部を使用して、これを調整しました。 Ubuntuは、デフォルトのinit-scriptインタープリターとしてdashを使用しますが、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/default/jboss-asに配置):

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



動作するもの(コマンド、使用Sudo service jboss-as <command>からスクリプトをリンクした後/etc/init.d/jboss-as):

  • 起動(サーバーが正常に起動するまでブロック)
  • 停止(ブロッキングも)
  • 再起動
  • 状態

テストされていないもの:

  • リロードが適切に機能する場合
  • JBossに障害が発生するとどうなりますか
  • 他のいくつかの可能性のある失敗に対して何が起こるか

特にいくつかのトピックには飛び込みませんでした。特に:

  • Set + e/set -eが正確に行うことと必要なこと(他のスクリプトで使用されます)
  • Log _ * _ msg関数のセマンティクスとそれらの使用場所
  • ロギングスタッフを適切に行う方法(場所をJBossに渡す)
  • Jboss-cli.shスクリプトをより多くのこと(起動/実行の検出など)に使用できる場合、また使用する必要がある場合
  • Standalone.shを常にプロセスとして実行することが本当に必要な場合
  • 戻り値が適切な場合

私は間違いなくシェルスクリプトの第一人者ではないことに注意してください-私はかなり無知です。あなたがコードに愚かさを見つけたり、改善のためのアイデアを見つけたなら、私はそれらを聞いてうれしいです。

12
koma

最近、RedHatのサーバーからtar.gzファイルをダウンロードし、抽出し、jboss-asをサービスとして追加し、非常に基本的な設定を行うJBoss AS 7のインストーラーを作成しました。これで、数秒で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

ブログ投稿 でスクリプトの手順を説明しました。また、このスクリプトファイルをアーカイブとしてダウンロードするためのリンクもあります。

4
#! /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
2
helmedeiros

bin init.d/jboss-as-standalone.sh(jboss-as-7.1.0.CR1b)があるディレクトリの下を見る

2
Davide Consonni

今夜この戦いを続けていて、自分の発見を共有すると思いました。最後に、ここでインストール手順に従いました: http://ptoconnor.wordpress.com/2012/11/19/jboss-as-7-1-1-on-an-ubuntu-12-04- aws-instance-running-Oracle-Java-7 / いくつかの変更。

/ optではなく/ usr/shareにインストールした

Jbossをサービスとして実行するために、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

現在、多くのバリエーションがあることを知っていますが、これが次の人の検索に役立つことを願っています。私が望んだのはJBPMホストだけでした...

2
Chris Edwards

ここで正しいとマークされた答えは、私にとってはうまくいきませんでした。再起動すると、「申し訳ありませんが、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
2
scorcher14

これが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 $?
}

展開がすべて完了するとすぐに[OK]を言うようにスタートアップを取得できません。いくつか試してみましたが、まだ運がありません-永遠に待つか、現在シェルスクリプトが分岐されるとすぐに[OK]と表示されます。遅延を十分に長く設定している限り、停止する方が適切です。ログのローテーションは簡単に追加できます

1
John Newman

実行されたコマンドのPIDを出力するには、シェル変数$!を使用します。この変数は、実行されたプロセスの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
    ;;
0
Vikrant Telkar

Jbossディストリビューションには、bin/init.dにあるディレクトリがあり、シェルスクリプトがinit.dに配置してjbossをサービスとして起動できます。スクリプトはjboss-as-standalone.shと呼ばれます

0
Javier Sabino

ここで実際に機能する解決策は見つかりませんでした...(少なくともUbuntu 12.04 LTSの場合)

そこで、私は自分で作成しました(JBossを起動し、start-stop-daemon utilsを使用して、JBossが完了するのを待って停止することができます):

#!/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_CONFファイルがjboss-as.confにある場合は、/etc/default/jboss-as-7変数をファイルの上部近くで変更したり、削除したりできます。

0
Anthony O.

LinuxでJBossをサービスとして実行する別の方法:

LinuxでのサービスとしてのJBoss