standalone management instalar iniciar hat eap desde consola configurar administracion linux ubuntu ubuntu-10.04 jboss7.x start-stop-daemon

management - instalar jboss en linux red hat



Inicie JBoss 7 como un servicio en Linux (12)

Aquí está el mío para gentoo. Aún no es perfecto pero está bastante limpio y funciona lo suficientemente bien para mí. Primero un pequeño cambio en la instalación de 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 $? }

No puedo hacer que el inicio diga [OK] tan pronto como finalicen todas las implementaciones. He intentado algunas cosas pero todavía no tengo suerte, ya sea que espere por siempre o que solo diga [OK] tan pronto como se bifurque el script de shell. Detener es mejor, siempre que establezca la demora el tiempo suficiente. La rotación de registros sería bastante fácil de agregar

Las versiones anteriores de JBoss incluían scripts (como jboss_init_redhat.sh ) que podían copiarse en /etc/init.d para agregarlo como servicio, para que se iniciara al arrancar. Parece que no puedo encontrar ningún script similar en JBoss 7. ¿Alguien ha hecho algo como esto?

PD: estoy tratando de lograr esto en Ubuntu 10.04


Después de pasar un par de horas husmeando, terminé creando /etc/init.d/jboss con los siguientes contenidos

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

Aquí está el contenido de java.sh :

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

Y jboss.sh :

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

Obviamente, debe asegurarse de configurar JAVA_HOME y JBOSS_HOME en su entorno.

luego ejecuté sudo update-rc.d jboss defaults para que JBoss se inicie automáticamente al arrancar el sistema

Encontré este artículo útil en la creación del script de inicio anterior. Una vez más, el script anterior es para Ubuntu (versión 10.04 en mi caso), por lo que su uso en Fedora / RedHat o CentOS probablemente no funcionará (la configuración realizada en los comentarios es diferente para ellos).


Hay un directorio en la distribución de jboss ubicado en bin / init.d con un script de shell que puede colocar en init.d para iniciar jboss como un servicio. El script se llama jboss-as-standalone.sh


La respuesta marcada como correcta aquí no funcionó para mí. Al reiniciar, aparece un error de seguridad relacionado con el uso de sudo, que dice "lo siento, debe tener un tty para ejecutar sudo". La investigación adicional reveló que deshabilitar la restricción de sudo tty podría causar la exposición de contraseñas de texto sin formato, por lo que no es bueno.

Esto es lo que terminé y funciona bien para mí:

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


Mire en el directorio bin que tiene init.d / jboss-as-standalone.sh (jboss-as-7.1.0.CR1b)


No encontré ninguna solución aquí que realmente funcionara ... (al menos para Ubuntu 12.04 LTS)

Así que hice mi propio (que es capaz de iniciar JBoss y esperar a que se complete, y detenerlo, utilizando los utils de start-stop-daemon ):

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

Se puede cambiar la variable JBOSS_CONF cerca de la parte superior del archivo y eliminarla si el archivo jboss-as.conf se encuentra en /etc/default/jboss-as-7 .



Para imprimir el PID del comando ejecutado use la variable de shell $ !. Esta variable imprimirá el PID del proceso ejecutado.

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 ;;


Recientemente escribí el instalador para JBoss AS 7 que descarga archivos tar.gz del servidor de RedHat, los extrae, agrega jboss-as como servicio y hace algunas configuraciones muy básicas. Con eso me preparo para usar JBoss AS 7 en varios segundos.

Script de instalación:

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

Script de inicio de sesión:

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

Describí los pasos del guión en mi publicación de blog . También tiene el enlace para descargar estos archivos de script como archivo.


Solo he estado luchando a través de esto esta noche, y pensé en compartir mis hallazgos. Al final seguí las instrucciones de instalación aquí: http://ptoconnor.wordpress.com/2012/11/19/jboss-as-7-1-1-on-an-ubuntu-12-04-aws-instance-running-oracle-java-7/ con algunas modificaciones;

Instalé en / usr / share not / opt

Para hacer que jboss se ejecute como un servicio, creé un enlace simbólico para redhat / centos friendly /usr/share/jboss-as-7.1.1.Final/bin/init.d/jboss-as-standalone.sh que era provisto con la versión final 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

a continuación, algunos cambios para que sea amigable 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

ahora solo se trata de instalar el servicio jboss usando el script anterior.

sudo update-rc.d jboss defaults

Sé que hay muchas variaciones ahora, pero espero que esto ayude a la próxima persona que busque. Todo lo que quería era un host de JBPM ...


También tomé una foto de un script para Ubuntu 10.04 LTS. La versión de JBoss es 7.1.1. Quería una secuencia de comandos que realmente pruebe el inicio exitoso de JBoss y que sea capaz de cerrar JBoss de forma relativamente elegante. Mi punto de partida fue el script JBoss incluido en el directorio bin / init.d en la descarga de JBoss 7.1.1. Lo adapté con algunos bits de otros scripts en esta página, así como otros scripts de inicio de Ubuntu. Tenga en cuenta que Ubuntu usa dash como su intérprete de script de inicio predeterminado, no bash como aparentemente esperado por el script de JBoss. De importancia media es que el registro se lleva a cabo en /var/log/jboss-as lugar de ${JBOSS_HOME}/standalone/log . El registro también se usa para determinar si JBoss se inició correctamente.

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

Y la configuración que lo acompaña (ponerlo en / etc / default / jboss-as):

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



Lo que funciona (comandos, use sudo service jboss-as <command> luego de vincular el script desde /etc/init.d/jboss-as ):

  • Inicio (bloqueo hasta que el servidor se inició correctamente)
  • Detener (también bloquear)
  • Reiniciar
  • Estado

Lo que no se prueba

  • Si la recarga funciona correctamente
  • ¿Qué pasa si falla JBoss?
  • Lo que sucede por muchos otros posibles errores

No profundicé en varios temas todavía, especialmente:

  • Lo que establece + e / set -e hace exactamente y es obligatorio (se usa en otros scripts)
  • ¿Cuál es la semántica de las funciones log _ * _ msg y dónde deben usarse?
  • Cómo hacer correctamente las tareas de registro (pasando la ubicación a JBoss)
  • Si el script jboss-cli.sh podría y debería usarse para más cosas (como inicio / detección en ejecución)
  • Si es realmente necesario ejecutar standalone.sh como un proceso todo el tiempo
  • Si los valores de retorno son apropiados

Tenga en cuenta que definitivamente no soy un gurú de guión de shell, no tengo ni idea. Entonces, si encuentras estupideces en el código o tienes alguna idea de mejora, me gustaría escucharlas.


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