271 lines
6.2 KiB
Bash
Executable File
271 lines
6.2 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# WildFly control script
|
|
#
|
|
# chkconfig: 2345 80 20
|
|
# description: WildFly startup/shutdown script
|
|
#
|
|
### BEGIN INIT INFO
|
|
# Provides: wildfly
|
|
# Required-Start: $remote_fs $network
|
|
# Required-Stop: $remote_fs $network
|
|
# Should-Start: $named
|
|
# Should-Stop: $named
|
|
# Default-Start: 2 3 4 5
|
|
# Default-Stop: 0 1 6
|
|
# Short-Description: WildFly Application Server
|
|
# Description: WildFly startup/shutdown script
|
|
### END INIT INFO
|
|
|
|
# Source function library.
|
|
. /etc/init.d/functions
|
|
|
|
NAME=$(readlink -f "${0}" | xargs basename)
|
|
|
|
# Check privileges
|
|
if [ "$(id -u)" -ne 0 ]; then
|
|
echo "You need root privileges to run this script"
|
|
exit 1
|
|
fi
|
|
|
|
# Load wildfly init.d configuration.
|
|
if [ -z "$JBOSS_CONF" ]; then
|
|
JBOSS_CONF="/etc/default/${NAME}"
|
|
fi
|
|
|
|
# Set defaults.
|
|
if [ -f "$JBOSS_CONF" ]; then
|
|
. "$JBOSS_CONF"
|
|
fi
|
|
|
|
# Location of JDK
|
|
if [ -n "$JAVA_HOME" ]; then
|
|
export JAVA_HOME
|
|
fi
|
|
|
|
# Setup the JVM
|
|
if [ -z "$JAVA" ]; then
|
|
if [ -n "$JAVA_HOME" ]; then
|
|
JAVA="$JAVA_HOME/bin/java"
|
|
else
|
|
JAVA="java"
|
|
fi
|
|
fi
|
|
|
|
# Location of wildfly
|
|
if [ -z "$JBOSS_HOME" ]; then
|
|
JBOSS_HOME="/opt/${NAME}"
|
|
fi
|
|
export JBOSS_HOME
|
|
|
|
# Check if wildfly is installed
|
|
if [ ! -f "$JBOSS_HOME/jboss-modules.jar" ]; then
|
|
echo "$NAME is not installed in \"$JBOSS_HOME\""
|
|
exit 1
|
|
fi
|
|
|
|
# Run as wildfly user
|
|
if [ -z "$JBOSS_USER" ]; then
|
|
JBOSS_USER=wildfly
|
|
fi
|
|
|
|
# Check wildfly user
|
|
if ! id $JBOSS_USER > /dev/null 2>&1 || [ -z "$JBOSS_USER" ]; then
|
|
echo "User \"$JBOSS_USER\" does not exist..."
|
|
exit 1
|
|
fi
|
|
|
|
# Check owner of JBOSS_HOME
|
|
if [ ! "$(stat -L -c "%U" "$JBOSS_HOME")" = $JBOSS_USER ]; then
|
|
echo "The user \"$JBOSS_USER\" is not owner of \"$(readlink -f "$JBOSS_HOME")\""
|
|
echo "Try: chown -R $JBOSS_USER:$JBOSS_USER \"$(readlink -f "$JBOSS_HOME")\""
|
|
exit 1
|
|
fi
|
|
|
|
# Location to set the pid file
|
|
if [ -z "$JBOSS_PIDFILE" ]; then
|
|
JBOSS_PIDFILE=/var/run/wildfly/${NAME}.pid
|
|
fi
|
|
export JBOSS_PIDFILE
|
|
|
|
# Location to set the lock file
|
|
if [ -z "$JBOSS_LOCKFILE" ]; then
|
|
JBOSS_LOCKFILE=/var/lock/subsys/${NAME}
|
|
fi
|
|
|
|
# Location to keep the console log
|
|
if [ -z "$JBOSS_CONSOLE_LOG" ]; then
|
|
JBOSS_CONSOLE_LOG=/var/log/${NAME}/console.log
|
|
fi
|
|
|
|
# The amount of time to wait for startup
|
|
if [ -z "$STARTUP_WAIT" ]; then
|
|
STARTUP_WAIT=30
|
|
fi
|
|
|
|
# The amount of time to wait for shutdown
|
|
if [ -z "$SHUTDOWN_WAIT" ]; then
|
|
SHUTDOWN_WAIT=30
|
|
fi
|
|
|
|
# Startup mode of wildfly
|
|
if [ -z "$JBOSS_MODE" ]; then
|
|
JBOSS_MODE=standalone
|
|
fi
|
|
|
|
if [ -z "$JBOSS_BASE_DIR" ]; then
|
|
JBOSS_BASE_DIR="$JBOSS_HOME/$JBOSS_MODE"
|
|
fi
|
|
JBOSS_OPTS="$JBOSS_OPTS -Djboss.server.base.dir=$JBOSS_BASE_DIR"
|
|
|
|
JBOSS_MARKERFILE=$JBOSS_BASE_DIR/tmp/startup-marker
|
|
|
|
# Startup mode script
|
|
if [ "$JBOSS_MODE" = "standalone" ]; then
|
|
JBOSS_SCRIPT=$JBOSS_HOME/bin/standalone.sh
|
|
if [ -z "$JBOSS_CONFIG" ]; then
|
|
JBOSS_CONFIG=standalone.xml
|
|
fi
|
|
else
|
|
JBOSS_SCRIPT=$JBOSS_HOME/bin/domain.sh
|
|
if [ -z "$JBOSS_DOMAIN_CONFIG" ]; then
|
|
JBOSS_DOMAIN_CONFIG=domain.xml
|
|
fi
|
|
if [ -z "$JBOSS_HOST_CONFIG" ]; then
|
|
JBOSS_HOST_CONFIG=host.xml
|
|
fi
|
|
fi
|
|
|
|
# Helper function to check status of wildfly service
|
|
check_status() {
|
|
status -p "$JBOSS_PIDFILE" -l "$(basename "$JBOSS_LOCKFILE")" "$NAME" >/dev/null 2>&1
|
|
}
|
|
|
|
start() {
|
|
printf "%s\n" $"Starting $NAME: "
|
|
check_status
|
|
status_start=$?
|
|
if [ $status_start -eq 3 ]; then
|
|
mkdir -p "$(dirname "$JBOSS_PIDFILE")"
|
|
mkdir -p "$(dirname "$JBOSS_CONSOLE_LOG")"
|
|
chown $JBOSS_USER "$(dirname "$JBOSS_PIDFILE")" || true
|
|
cat /dev/null > "$JBOSS_CONSOLE_LOG"
|
|
currenttime=$(date +%s%N | cut -b1-13)
|
|
|
|
if [ "$JBOSS_MODE" = "standalone" ]; then
|
|
cd "$JBOSS_HOME" >/dev/null 2>&1 || exit
|
|
daemon --user=$JBOSS_USER --pidfile="$JBOSS_PIDFILE" LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE="$JBOSS_PIDFILE" "$JBOSS_SCRIPT -c $JBOSS_CONFIG $JBOSS_OPTS &" >> "$JBOSS_CONSOLE_LOG" 2>&1
|
|
cd - >/dev/null 2>&1 || exit
|
|
else
|
|
cd "$JBOSS_HOME" >/dev/null 2>&1 || exit
|
|
daemon --user=$JBOSS_USER --pidfile="$JBOSS_PIDFILE" LAUNCH_JBOSS_IN_BACKGROUND=1 JBOSS_PIDFILE="$JBOSS_PIDFILE" "$JBOSS_SCRIPT --domain-config=$JBOSS_DOMAIN_CONFIG --host-config=$JBOSS_HOST_CONFIG $JBOSS_OPTS &" >> "$JBOSS_CONSOLE_LOG" 2>&1
|
|
cd - >/dev/null 2>&1 || exit
|
|
fi
|
|
|
|
count=0
|
|
until [ $count -gt $STARTUP_WAIT ]
|
|
do
|
|
sleep 1
|
|
count=$($count+1);
|
|
if [ -f "$JBOSS_MARKERFILE" ]; then
|
|
markerfiletimestamp=$(grep -o '[0-9]\+' "$JBOSS_MARKERFILE") > /dev/null
|
|
if [ "$markerfiletimestamp" -gt "$currenttime" ] ; then
|
|
if ! grep -i 'success:' "$JBOSS_MARKERFILE" > /dev/null; then
|
|
success
|
|
echo
|
|
touch "$JBOSS_LOCKFILE"
|
|
exit 0
|
|
fi
|
|
|
|
if ! grep -i 'error:' "$JBOSS_MARKERFILE" > /dev/null; then
|
|
warning
|
|
echo
|
|
echo "$NAME started with errors, please see server log for details."
|
|
touch "$JBOSS_LOCKFILE"
|
|
exit 0
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
|
|
if check_status; then
|
|
warning
|
|
echo
|
|
echo "$NAME hasn't started within the timeout allowed."
|
|
touch "$JBOSS_LOCKFILE"
|
|
exit 0
|
|
else
|
|
failure
|
|
echo
|
|
echo "$NAME failed to start within the timeout allowed."
|
|
exit 1
|
|
fi
|
|
|
|
else
|
|
echo
|
|
$0 status
|
|
fi
|
|
}
|
|
|
|
stop() {
|
|
printf "%s\n" $"Shutting down $NAME: "
|
|
check_status
|
|
status_stop=$?
|
|
if [ $status_stop -eq 0 ]; then
|
|
count=0;
|
|
if [ -f "$JBOSS_PIDFILE" ]; then
|
|
read -r kpid < "$JBOSS_PIDFILE"
|
|
kwait=$($SHUTDOWN_WAIT)
|
|
|
|
# Try issuing SIGTERM
|
|
su -s /bin/sh -c "kill -15 $kpid" $JBOSS_USER
|
|
until [ "$(pgrep --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
|
|
if ! su -s /bin/sh -c "kill -9 $kpid" $JBOSS_USER 2> /dev/null; then
|
|
failure
|
|
exit 1
|
|
fi
|
|
fi
|
|
fi
|
|
success
|
|
elif [ $status_stop -eq 1 ]; then
|
|
echo
|
|
printf "%s\n" "$NAME dead but pid file exists, cleaning up"
|
|
elif [ $status_stop -eq 2 ]; then
|
|
echo
|
|
printf "%s\n" "$NAME dead but subsys locked, cleaning up"
|
|
elif [ $status_stop -eq 3 ]; then
|
|
echo
|
|
printf "%s\n" $"$NAME is already stopped"
|
|
fi
|
|
rm -f "$JBOSS_PIDFILE"
|
|
rm -f "$JBOSS_LOCKFILE"
|
|
echo
|
|
}
|
|
|
|
case "$1" in
|
|
start)
|
|
start
|
|
;;
|
|
stop)
|
|
stop
|
|
;;
|
|
restart)
|
|
$0 stop
|
|
$0 start
|
|
;;
|
|
status)
|
|
status -p "$JBOSS_PIDFILE" -l "$(basename "$JBOSS_LOCKFILE")" "$NAME"
|
|
;;
|
|
*)
|
|
## If no parameters are given, print which are avaiable.
|
|
echo "Usage: $0 {start|stop|restart|status}"
|
|
exit 1
|
|
;;
|
|
esac
|