Frühere Versionen von JBoss enthielten Skripte (wie jboss_init_redhat.sh
) das könnte nach /etc/init.d kopiert werden, um es als Dienst hinzuzufügen - also würde es beim Booten starten. Ich kann in JBoss 7 scheinbar keine ähnlichen Skripte finden. Hat jemand schon so etwas gemacht?
P.S. Ich versuche dies in Ubuntu 10.04 zu erreichen
Nachdem ich ein paar Stunden rumgeschnüffelt hatte, kreierte ich /etc/init.d/jboss
mit folgendem Inhalt
#!/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
Hier ist der Inhalt von Java.sh
:
export Java_HOME=/usr/lib/jvm/Java_current
export PATH=$Java_HOME/bin:$PATH
Und jboss.sh
:
export JBOSS_HOME=/opt/jboss/as/jboss_current
export PATH=$JBOSS_HOME/bin:$PATH
Natürlich müssen Sie sicherstellen, dass Java_HOME und JBOSS_HOME für Ihre Umgebung geeignet sind.
dann lief ich Sudo update-rc.d jboss defaults
damit JBoss automatisch beim Systemstart startet
Ich fand diesen Artikel hilfreich bei der Erstellung des Start-Skripts oben. Auch hier gilt das obige Skript für Ubuntu (in meinem Fall Version 10.04). Daher funktioniert die Verwendung in Fedora/RedHat oder CentOS wahrscheinlich nicht (die in den Kommentaren vorgenommenen Einstellungen sind für diese anders).
Ich habe auch ein Skript für Ubuntu 10.04 LTS ausprobiert. JBoss-Version ist 7.1.1. Ich wollte ein Skript, das wirklich für einen erfolgreichen JBoss-Start testet und das JBoss relativ ordnungsgemäß herunterfahren kann. Mein Ausgangspunkt war das JBoss-Skript, das im Verzeichnis bin/init.d des JBoss 7.1.1-Downloads enthalten ist. Ich habe dies mit einigen Bits aus anderen Skripten auf dieser Seite sowie anderen Ubuntu-Init-Skripten angepasst. Beachten Sie, dass Ubuntu dash als Standardinterpreter für Init-Skripte verwendet und nicht wie vom JBoss-Skript erwartet bash. Von mittlerer Bedeutung ist, dass die Protokollierung in /var/log/jboss-as
Anstatt von ${JBOSS_HOME}/standalone/log
. Das Protokoll wird auch verwendet, um festzustellen, ob JBoss erfolgreich gestartet wurde.
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
Und die dazugehörige Konfiguration (in/etc/default/jboss-as):
# JBoss AS configuration
JBOSS_HOME="/var/local/jboss-as"
JBOSS_USER=jboss
Was funktioniert (Befehle, benutze Sudo service jboss-as <command>
nach dem Verlinken des Skripts von /etc/init.d/jboss-as
):
Was nicht getestet wurde:
Ich habe mich noch nicht mit verschiedenen Themen befasst, insbesondere:
Beachten Sie, dass ich definitiv kein Shell-Script-Guru bin - ich bin ziemlich ahnungslos. Wenn Sie also irgendwelche Dummheiten im Code finden oder Verbesserungsvorschläge haben, würde ich mich freuen, sie zu hören.
Kürzlich habe ich ein Installationsprogramm für JBoss AS 7 geschrieben, das die tar.gz-Datei vom RedHat-Server herunterlädt, extrahiert, jboss-as als Dienst hinzufügt und einige sehr grundlegende Konfigurationen vornimmt. Damit bin ich in wenigen Sekunden für den Einsatz von JBoss AS 7 gerüstet.
Installationsskript:
#!/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."
Init-Skript:
#!/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
Die Scriptschritte habe ich in meinem Blogpost beschrieben. Es hat auch den Link, um diese Skriptdateien als Archiv herunterzuladen.
#! /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
Beobachten Sie unter bin das Verzeichnis, in dem Sie init.d/jboss-as-standalone.sh haben (jboss-as-7.1.0.CR1b)
Ich habe mich heute Abend nur durchgekämpft und dachte, ich würde meine Erkenntnisse teilen. Am Ende habe ich die Installationsanweisungen hier befolgt: http://ptoconnor.wordpress.com/2012/11/19/jboss-as-7-1-1-on-an-ubuntu-12-04- aws-instance-running-Oracle-Java-7 / mit einigen Änderungen;
Ich habe nach/usr/share nicht/opt installiert
Damit jboss als Dienst ausgeführt wird, habe ich einen symbolischen Link zu dem redhat/centos-freundlichen /usr/share/jboss-as-7.1.1.Final/bin/init.d/jboss-as-standalone.sh erstellt, der lautete mit der endgültigen Version 7.1.1 bereitgestellt
Sudo ln -s /usr/share/jboss-as-7.1.1.Final/bin/init.d/jboss-as-standalone.sh /etc/init.d/jboss
dann ein paar Änderungen, um es Ubuntu-freundlich zu machen
#!/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
jetzt muss nur noch der JBoss-Dienst mithilfe des obigen Skripts installiert werden.
Sudo update-rc.d jboss defaults
Ich weiß, dass es jetzt viele Variationen gibt, aber hoffentlich hilft dies der nächsten Person bei der Suche. Alles was ich wollte war ein JBPM Host ...
Die hier als richtig markierte Antwort hat bei mir nicht funktioniert. Beim Neustart wird ein Sicherheitsfehler im Zusammenhang mit der Verwendung von Sudo angezeigt, der besagt, "Entschuldigung, Sie müssen über ein tty verfügen, um Sudo ausführen zu können." Weitere Untersuchungen ergaben, dass das Deaktivieren der Sudo tty-Einschränkung dazu führen kann, dass Passwörter im Klartext angezeigt werden. Das ist also nicht gut.
Hier ist, was ich am Ende hatte und es funktioniert gut für mich:
#!/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
Hier ist meine für Gentoo. Noch nicht perfekt, aber ziemlich sauber und gut genug für mich. Erste kleine Änderung an der jboss-Installation:
~ # 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 $?
}
Ich kann den Start nicht veranlassen, [OK] zu sagen, sobald alle Bereitstellungen abgeschlossen sind. Ich habe ein paar Dinge ausprobiert, aber noch kein Glück - es wartet entweder ewig oder sagt gerade [OK], sobald das Shell-Skript gegabelt ist. Stoppen ist besser, solange Sie die Verzögerung lang genug einstellen. Die Protokollrotation wäre ziemlich einfach hinzuzufügen
Verwenden Sie zum Drucken der PID des ausgeführten Befehls die Shell-Variable $ !. Diese Variable gibt die PID des ausgeführten Prozesses aus.
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
;;
Die jboss-Distribution enthält ein Verzeichnis in bin/init.d mit einem Shell-Skript, das Sie in init.d platzieren können, um jboss als Dienst zu starten. Das Skript heißt jboss-as-standalone.sh
Ich habe hier keine Lösung gefunden, die wirklich funktioniert ... (zumindest für Ubuntu 12.04 LTS)
Also habe ich mein eigenes erstellt (das in der Lage ist, JBoss zu starten und zu warten, bis es fertig ist, und es zu stoppen, indem ich das 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
Man kann das JBOSS_CONF
Variable am oberen Rand der Datei sowie das Entfernen, wenn die jboss-as.conf
Datei befindet sich bei /etc/default/jboss-as-7
.
Eine andere Möglichkeit, JBoss als Dienst unter Linux auszuführen: