Created
April 4, 2015 12:54
-
-
Save blahah/029d7a2cff3bf4d85971 to your computer and use it in GitHub Desktop.
JBOSS WildFly standalone background launcher
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# this is a modified WildFly standalone startup script. It launches the | |
# server in the background, and instead of the script running until the server | |
# exits, the script runs until it receives a kill signal (leaving the server | |
# running in the background). | |
# | |
# This allows you to monitor the script output and decide when to kill it. For | |
# example if you wanted to only exit the script once the server has | |
# successfully launched, you could do: | |
# ./standalone.sh | grep -m1 'success' | head -1 | |
# | |
# Use --debug to activate debug mode with an optional argument to specify the port. | |
# Usage : standalone.bat --debug | |
# standalone.bat --debug 9797 | |
# By default debug mode is disable. | |
DEBUG_MODE=false | |
DEBUG_PORT="8787" | |
SERVER_OPTS="" | |
while [ "$#" -gt 0 ] | |
do | |
case "$1" in | |
--debug) | |
DEBUG_MODE=true | |
shift | |
if [ -n "$1" ] && [ "${1#*-}" = "$1" ]; then | |
DEBUG_PORT=$1 | |
fi | |
;; | |
--) | |
shift | |
break;; | |
*) | |
SERVER_OPTS="$SERVER_OPTS \"$1\"" | |
;; | |
esac | |
shift | |
done | |
DIRNAME=`dirname "$0"` | |
PROGNAME=`basename "$0"` | |
GREP="grep" | |
# Use the maximum available, or set MAX_FD != -1 to use that | |
MAX_FD="maximum" | |
# OS specific support (must be 'true' or 'false'). | |
cygwin=false; | |
darwin=false; | |
linux=false; | |
solaris=false; | |
freebsd=false; | |
case "`uname`" in | |
CYGWIN*) | |
cygwin=true | |
;; | |
Darwin*) | |
darwin=true | |
;; | |
FreeBSD) | |
freebsd=true | |
;; | |
Linux) | |
linux=true | |
;; | |
SunOS*) | |
solaris=true | |
;; | |
esac | |
# For Cygwin, ensure paths are in UNIX format before anything is touched | |
if $cygwin ; then | |
[ -n "$JBOSS_HOME" ] && | |
JBOSS_HOME=`cygpath --unix "$JBOSS_HOME"` | |
[ -n "$JAVA_HOME" ] && | |
JAVA_HOME=`cygpath --unix "$JAVA_HOME"` | |
[ -n "$JAVAC_JAR" ] && | |
JAVAC_JAR=`cygpath --unix "$JAVAC_JAR"` | |
fi | |
# Setup JBOSS_HOME | |
RESOLVED_JBOSS_HOME=`cd "$DIRNAME/.."; pwd` | |
if [ "x$JBOSS_HOME" = "x" ]; then | |
# get the full path (without any relative bits) | |
JBOSS_HOME=$RESOLVED_JBOSS_HOME | |
else | |
SANITIZED_JBOSS_HOME=`cd "$JBOSS_HOME"; pwd` | |
if [ "$RESOLVED_JBOSS_HOME" != "$SANITIZED_JBOSS_HOME" ]; then | |
echo "" | |
echo " WARNING: JBOSS_HOME may be pointing to a different installation - unpredictable results may occur." | |
echo "" | |
echo " JBOSS_HOME: $JBOSS_HOME" | |
echo "" | |
sleep 2s | |
fi | |
fi | |
export JBOSS_HOME | |
# Read an optional running configuration file | |
if [ "x$RUN_CONF" = "x" ]; then | |
RUN_CONF="$DIRNAME/standalone.conf" | |
fi | |
if [ -r "$RUN_CONF" ]; then | |
. "$RUN_CONF" | |
fi | |
# Set debug settings if not already set | |
if [ "$DEBUG_MODE" = "true" ]; then | |
DEBUG_OPT=`echo $JAVA_OPTS | $GREP "\-agentlib:jdwp"` | |
if [ "x$DEBUG_OPT" = "x" ]; then | |
JAVA_OPTS="$JAVA_OPTS -agentlib:jdwp=transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=n" | |
else | |
echo "Debug already enabled in JAVA_OPTS, ignoring --debug argument" | |
fi | |
SERVER_OPTS="$SERVER_OPTS --debug ${DEBUG_PORT}" | |
fi | |
# Setup the JVM | |
if [ "x$JAVA" = "x" ]; then | |
if [ "x$JAVA_HOME" != "x" ]; then | |
JAVA="$JAVA_HOME/bin/java" | |
else | |
JAVA="java" | |
fi | |
fi | |
if $linux || $solaris; then | |
# consolidate the server and command line opts | |
CONSOLIDATED_OPTS="$JAVA_OPTS $SERVER_OPTS" | |
# process the standalone options | |
for var in $CONSOLIDATED_OPTS | |
do | |
# Remove quotes | |
p=`echo $var | tr -d '"'` | |
case $p in | |
-Djboss.server.base.dir=*) | |
JBOSS_BASE_DIR=`readlink -m ${p#*=}` | |
;; | |
-Djboss.server.log.dir=*) | |
JBOSS_LOG_DIR=`readlink -m ${p#*=}` | |
;; | |
-Djboss.server.config.dir=*) | |
JBOSS_CONFIG_DIR=`readlink -m ${p#*=}` | |
;; | |
esac | |
done | |
fi | |
# No readlink -m on BSD | |
if $darwin || $freebsd; then | |
# consolidate the server and command line opts | |
CONSOLIDATED_OPTS="$JAVA_OPTS $SERVER_OPTS" | |
# process the standalone options | |
for var in $CONSOLIDATED_OPTS | |
do | |
# Remove quotes | |
p=`echo $var | tr -d '"'` | |
case $p in | |
-Djboss.server.base.dir=*) | |
JBOSS_BASE_DIR=`cd ${p#*=} ; pwd -P` | |
;; | |
-Djboss.server.log.dir=*) | |
JBOSS_LOG_DIR=`cd ${p#*=} ; pwd -P` | |
;; | |
-Djboss.server.config.dir=*) | |
JBOSS_CONFIG_DIR=`cd ${p#*=} ; pwd -P` | |
;; | |
esac | |
done | |
fi | |
# determine the default base dir, if not set | |
if [ "x$JBOSS_BASE_DIR" = "x" ]; then | |
JBOSS_BASE_DIR="$JBOSS_HOME/standalone" | |
fi | |
# determine the default log dir, if not set | |
if [ "x$JBOSS_LOG_DIR" = "x" ]; then | |
JBOSS_LOG_DIR="$JBOSS_BASE_DIR/log" | |
fi | |
# determine the default configuration dir, if not set | |
if [ "x$JBOSS_CONFIG_DIR" = "x" ]; then | |
JBOSS_CONFIG_DIR="$JBOSS_BASE_DIR/configuration" | |
fi | |
# For Cygwin, switch paths to Windows format before running java | |
if $cygwin; then | |
JBOSS_HOME=`cygpath --path --windows "$JBOSS_HOME"` | |
JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` | |
JBOSS_MODULEPATH=`cygpath --path --windows "$JBOSS_MODULEPATH"` | |
JBOSS_BASE_DIR=`cygpath --path --windows "$JBOSS_BASE_DIR"` | |
JBOSS_LOG_DIR=`cygpath --path --windows "$JBOSS_LOG_DIR"` | |
JBOSS_CONFIG_DIR=`cygpath --path --windows "$JBOSS_CONFIG_DIR"` | |
fi | |
if [ "$PRESERVE_JAVA_OPTS" != "true" ]; then | |
# Check for -d32/-d64 in JAVA_OPTS | |
JVM_D64_OPTION=`echo $JAVA_OPTS | $GREP "\-d64"` | |
JVM_D32_OPTION=`echo $JAVA_OPTS | $GREP "\-d32"` | |
# Check If server or client is specified | |
SERVER_SET=`echo $JAVA_OPTS | $GREP "\-server"` | |
CLIENT_SET=`echo $JAVA_OPTS | $GREP "\-client"` | |
if [ "x$JVM_D32_OPTION" != "x" ]; then | |
JVM_OPTVERSION="-d32" | |
elif [ "x$JVM_D64_OPTION" != "x" ]; then | |
JVM_OPTVERSION="-d64" | |
elif $darwin && [ "x$SERVER_SET" = "x" ]; then | |
# Use 32-bit on Mac, unless server has been specified or the user opts are incompatible | |
"$JAVA" -d32 $JAVA_OPTS -version > /dev/null 2>&1 && PREPEND_JAVA_OPTS="-d32" && JVM_OPTVERSION="-d32" | |
fi | |
CLIENT_VM=false | |
if [ "x$CLIENT_SET" != "x" ]; then | |
CLIENT_VM=true | |
elif [ "x$SERVER_SET" = "x" ]; then | |
if $darwin && [ "$JVM_OPTVERSION" = "-d32" ]; then | |
# Prefer client for Macs, since they are primarily used for development | |
CLIENT_VM=true | |
PREPEND_JAVA_OPTS="$PREPEND_JAVA_OPTS -client" | |
else | |
PREPEND_JAVA_OPTS="$PREPEND_JAVA_OPTS -server" | |
fi | |
fi | |
# EAP6-121 feature disabled | |
# Enable rotating GC logs if the JVM supports it and GC logs are not already enabled | |
#NO_GC_LOG_ROTATE=`echo $JAVA_OPTS | $GREP "\-verbose:gc"` | |
#if [ "x$NO_GC_LOG_ROTATE" = "x" ]; then | |
# backup prior gc logs | |
#mv "$JBOSS_LOG_DIR/gc.log.0" "$JBOSS_LOG_DIR/backupgc.log.0" >/dev/null 2>&1 | |
#mv "$JBOSS_LOG_DIR/gc.log.1" "$JBOSS_LOG_DIR/backupgc.log.1" >/dev/null 2>&1 | |
#mv "$JBOSS_LOG_DIR/gc.log.2" "$JBOSS_LOG_DIR/backupgc.log.2" >/dev/null 2>&1 | |
#mv "$JBOSS_LOG_DIR/gc.log.3" "$JBOSS_LOG_DIR/backupgc.log.3" >/dev/null 2>&1 | |
#mv "$JBOSS_LOG_DIR/gc.log.4" "$JBOSS_LOG_DIR/backupgc.log.4" >/dev/null 2>&1 | |
#mv "$JBOSS_LOG_DIR/gc.log.*.current" "$JBOSS_LOG_DIR/backupgc.log.current" >/dev/null 2>&1 | |
#"$JAVA" $JVM_OPTVERSION -verbose:gc -Xloggc:"$JBOSS_LOG_DIR/gc.log" -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading -version >/dev/null 2>&1 && mkdir -p $JBOSS_LOG_DIR && PREPEND_JAVA_OPTS="$PREPEND_JAVA_OPTS -verbose:gc -Xloggc:\"$JBOSS_LOG_DIR/gc.log\" -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=3M -XX:-TraceClassUnloading" | |
#fi | |
JAVA_OPTS="$PREPEND_JAVA_OPTS $JAVA_OPTS" | |
fi | |
if [ "x$JBOSS_MODULEPATH" = "x" ]; then | |
JBOSS_MODULEPATH="$JBOSS_HOME/modules" | |
fi | |
# Display our environment | |
echo "=========================================================================" | |
echo "" | |
echo " JBoss Bootstrap Environment" | |
echo "" | |
echo " JBOSS_HOME: $JBOSS_HOME" | |
echo "" | |
echo " JAVA: $JAVA" | |
echo "" | |
echo " JAVA_OPTS: $JAVA_OPTS" | |
echo "" | |
echo "=========================================================================" | |
echo "" | |
# Execute the JVM in the background | |
$JAVA -D[Standalone] $JAVA_OPTS \ | |
-Dorg.jboss.boot.log.file=$JBOSS_LOG_DIR/server.log \ | |
-Dlogging.configuration=file:$JBOSS_CONFIG_DIR/logging.properties \ | |
-jar $JBOSS_HOME/jboss-modules.jar \ | |
-mp ${JBOSS_MODULEPATH} \ | |
org.jboss.as.standalone \ | |
-Djboss.home.dir=$JBOSS_HOME \ | |
-Djboss.server.base.dir=$JBOSS_BASE_DIR \ | |
$SERVER_OPTS & | |
trap exit PIPE |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment