Skip to content

Instantly share code, notes, and snippets.

@larstobi
Created November 15, 2011 15:56
Show Gist options
  • Select an option

  • Save larstobi/1367416 to your computer and use it in GitHub Desktop.

Select an option

Save larstobi/1367416 to your computer and use it in GitHub Desktop.
JBoss AS init script
#!/bin/sh
#
# JBoss Control Script
#
### BEGIN INIT INFO
# Provides: jbossas
# Required-Start: $network $syslog
# Required-Stop: $network $syslog
# Default-Start:
# Default-Stop:
# Description: JBoss J2EE Server
# Short-Description: start and stop jbossas
### END INIT INFO
# chkconfig: - 80 20
# description: JBoss J2EE Server
#
PACKAGENAME=jbossas
# Source function library.
if [ -r /etc/rc.d/init.d/functions ]; then
. /etc/rc.d/init.d/functions
fi
NAME=`basename $0`
unset ISBOOT
if [ ${NAME:0:1} = "S" -o ${NAME:0:1} = "K" ]
then
NAME=${NAME:3}
ISBOOT=1
fi
# Source configuration.
[ -f /etc/java/java.conf ] && . /etc/java/java.conf
#read in system wide jboss configuration
#this has to be /etc/$PACKAGENAME/jbossas.conf not /etc/${NAME}/jbossas.conf
#or -bin will fail (JBPAPP-5242)
. /etc/$PACKAGENAME/jbossas.conf
#read in service-specific jboss configuration
[ -f /etc/sysconfig/${NAME} ] && . /etc/sysconfig/${NAME}
export JAVA_HOME=${JAVA_HOME:-"/usr/lib/jvm/java"}
#define where jboss is - this is the directory containing directories log, bin, conf etc
JBOSS_HOME=${JBOSS_HOME:-"/var/lib/$PACKAGENAME"}
#make sure java is on your path
JAVAPTH=${JAVAPTH:-"$JAVA_HOME/bin"}
#define the classpath for the shutdown class
JBOSSCP=${JBOSSCP:-"$JBOSS_HOME/bin/shutdown.jar:$JBOSS_HOME/client/jbossall-client.jar"}
#define jboss configuration to start
JBOSSCONF=${JBOSSCONF:-"default"}
#define the script to use to start jboss
JBOSSSH=${JBOSSSH:-"$JBOSS_HOME/bin/run.sh -c $JBOSSCONF"}
#define the user under which jboss will run, or use RUNASIS to run as the current user
JBOSSUS=${JBOSSUS:-"jboss"}
#define the group under which jboss will run
JBOSSGR=${JBOSSGR:-"jboss"}
#define the lock file for this jboss instance
JBOSSLOCK=/var/lock/subsys/$NAME-$JBOSSCONF
#define the pid file for this jboss instance
JBOSSPID=/var/run/$NAME-$JBOSSCONF
# Set the defaults.
LOGFILE=/var/log/${NAME}/${NAME}-$JBOSSCONF
#define what will be done with the console log
JBOSS_CONSOLE=${JBOSS_CONSOLE:-"$JBOSS_HOME/server/$JBOSSCONF/log/console.log"}
#define what IP address for running jboss
JBOSS_IP=${JBOSS_IP:-""}
#define the jgroups UDP group (multicast address) for clustering
JBOSS_UDP_GROUP=${JBOSS_UDP_GROUP:-"228.1.2.3"}
#define the Http Session Replication UDP port (multicast)
JBOSS_UDP_PORT_WP=${JBOSS_UDP_PORT_WP:-"45577"}
#define the UDP port for JBoss clustering (multicast)
JBOSS_UDP_PORT_HA=${JBOSS_UDP_PORT_HA:-"45566"}
#define the UDP port for the ejb3 entity cache cluster (multicast)
JBOSS_UDP_PORT_EJB3=${JBOSS_UDP_PORT_EJB3:-"43333"}
#define the UDP port for ejb3 sfsb cache cluster (multicast)
JBOSS_UDP_PORT_EJB3SFSB=${JBOSS_UDP_PORT_EJB3SFSB:-"45551"}
#define the timeout period for starting the server
JBOSS_START_TIMEOUT=${JBOSS_START_TIMEOUT:-"240"}
#define the timeout period for stopping the server
JBOSS_STOP_TIMEOUT=${JBOSS_STOP_TIMEOUT:-"180"}
#default run.conf file
RUN_CONF=$JBOSS_HOME/bin/run.conf
#create the log directories
if [ ! -d /var/log/${NAME}/$JBOSSCONF ]; then
mkdir -p /var/log/${NAME}/$JBOSSCONF
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR /var/log/${NAME}/$JBOSSCONF
fi
fi
if [ ! -d $JBOSS_HOME/server/$JBOSSCONF ]; then
mkdir -p $JBOSS_HOME/server/$JBOSSCONF
ln -s /var/log/${NAME}/$JBOSSCONF $JBOSS_HOME/server/$JBOSSCONF/log
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR $JBOSS_HOME/server/$JBOSSCONF/log
fi
fi
#create the log file
if [ $JBOSS_CONSOLE != "\/dev\/null" ] & [ ! -d `dirname $JBOSS_CONSOLE` ]; then
mkdir -p `dirname $JBOSS_CONSOLE`
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR `dirname $JBOSS_CONSOLE`
fi
fi
if [ -n "$JBOSS_CONSOLE" -a ! -d "$JBOSS_CONSOLE" ]; then
# ensure the file exists
touch $JBOSS_CONSOLE
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown $JBOSSUS:$JBOSSGR $JBOSS_CONSOLE
fi
fi
if [ -n "$JBOSS_CONSOLE" -a ! -f "$JBOSS_CONSOLE" ]; then
touch $LOGFILE
echo "WARNING: location for saving console log invalid: $JBOSS_CONSOLE" >> $LOGFILE
echo "WARNING: ignoring it and using /dev/null" >> $LOGFILE
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown $JBOSSUS:$JBOSSGR $LOGFILE
fi
JBOSS_CONSOLE="/dev/null"
fi
if [ ! -z $JBOSS_IP ]; then
JBOSSSH="$JBOSSSH -b $JBOSS_IP"
fi
# Set the RUN_CONF to config specific, if it exists
if [ -f $JBOSS_HOME/server/$JBOSSCONF/run.conf ]; then
RUN_CONF=$JBOSS_HOME/server/$JBOSSCONF/run.conf
fi
# Read in run.conf and use them
if [ -f ${RUN_CONF} ]; then
. ${RUN_CONF}
fi
# Set other parameters to the VM
[ "x$JBOSS_UDP_GROUP" != "x" ] && \
JAVA_OPTS="$JAVA_OPTS -Djboss.partition.udpGroup=$JBOSS_UDP_GROUP"
[ "x$JBOSS_UDP_PORT_WP" != "x" ] && \
JAVA_OPTS="$JAVA_OPTS -Djboss.webpartition.mcast_port=$JBOSS_UDP_PORT_WP"
[ "x$JBOSS_UDP_PORT_HA" != "x" ] && \
JAVA_OPTS="$JAVA_OPTS -Djboss.hapartition.mcast_port=$JBOSS_UDP_PORT_HA"
[ "x$JBOSS_UDP_PORT_EJB3" != "x" ] && \
JAVA_OPTS="$JAVA_OPTS -Djboss.ejb3entitypartition.mcast_port=$JBOSS_UDP_PORT_EJB3"
[ "x$JBOSS_UDP_PORT_EJB3SFSB" != "x" ] && \
JAVA_OPTS="$JAVA_OPTS -Djboss.ejb3sfsbpartition.mcast_port=$JBOSS_UDP_PORT_EJB3SFSB"
# Set the awt.headless option
JAVA_OPTS="$JAVA_OPTS -Djava.awt.headless=true"
export JAVA_OPTS
CMD_START="cd $JBOSS_HOME/bin; $JBOSSSH"
# For SELinux we need to use 'runuser' not 'su'
if [ -x /sbin/runuser ]
then
SU=runuser
else
SU=su
fi
if [ "$JBOSSUS" = "RUNASIS" ]; then
SUBIT=""
else
SUBIT="$SU - $JBOSSUS -s /bin/sh -c "
fi
if [ -z "`echo $PATH | grep $JAVAPTH`" ]; then
export PATH=$PATH:$JAVAPTH
fi
if [ -a $JBOSS_HOME ] && [ ! -d "$JBOSS_HOME" ]; then
echo JBOSS_HOME does not exist as a valid directory : $JBOSS_HOME >> $LOGFILE
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown $JBOSSUS:$JBOSSGR $LOGFILE
fi
exit 1
fi
RETVAL=0
function procrunning() {
procid=0
#pid behaves differently on RHEL 6, so JBOSSSCRIPT is set differently
JBOSSSCRIPT="$JBOSS_HOME/bin/run.sh"
for procid in `pidof -x "$JBOSSSCRIPT"`; do
if [ ! -z $JBOSS_IP ]; then
ps -fp $procid | grep $JBOSSCONF | grep $JBOSS_IP > /dev/null && pid=$procid
else
ps -fp $procid | grep $JBOSSCONF > /dev/null && pid=$procid
fi
done
}
start() {
echo -n $"Starting ${NAME}: "
# if lock file exists
if [ -f $JBOSSLOCK ]; then
procrunning
if [ ! $pid = '0' ]; then
failure $"${NAME} startup"
echo -n -e "\nProcess already running"
echo -n -e "\n"
return 2
fi
fi
# check if port 8080 is being used
if [ -z $JBOSS_IP ] && [ $JBOSSCONF != "ports-01" ] && [ $JBOSSCONF != "ports-02" ] && [ $JBOSSCONF != "ports-03" ] && [ $JBOSSCONF != "minimal" ]; then
portbusy=`netstat -apntl|grep ":8080"`
if test "x$portbusy" != x; then
failure $"${NAME} startup"
echo -n -e "\nPort 8080 is busy, is there a Tomcat running?"
echo -n -e "\n"
return 1
fi
fi
if [ "$JBOSSUS" != "RUNASIS" ]; then
if [ -z "`id -u $JBOSSUS 2>/dev/null`" ]; then
failure $"${NAME} startup"
echo -n -e "\nUser $JBOSSUS does not exist. Create user first."
echo -n -e "\n"
return 2
fi
if [ -z "`id -g $JBOSSGR 2>/dev/null`" ]; then
failure $"${NAME} startup"
echo -n -e "\nGroup $JBOSSGR does not exist. Create group first."
echo -n -e "\n"
return 3
fi
fi
for logfile in boot.log cluster.log console.log server.log; do
if [ -f /var/log/$NAME/$JBOSSCONF/$logfile ]; then
if [ "$JBOSSUS" != "RUNASIS" ]; then
$SU $JBOSSUS -s /bin/sh -c "touch /var/log/$NAME/$JBOSSCONF/$logfile >/dev/null 2>&1"
if [ ! $? -eq 0 ]; then
failure $"${NAME} startup"
echo -n -e "\nLogfile /var/log/$NAME/$JBOSSCONF/$logfile exists but not writable by $JBOSSUS."
echo -n -e "\n"
return 4
fi
else
if [ ! -w /var/log/$NAME/$JBOSSCONF/$logfile ]; then
failure $"${NAME} startup"
echo -n -e "\nLogfile /var/log/$NAME/$JBOSSCONF/$logfile exists but not writable."
echo -n -e "\n"
return 4
fi
fi
fi
done
touch $JBOSS_HOME/server/$JBOSSCONF/log/temp.file
# check if JBOSS_HOME directory exists, create it if it does not
if [ ! -d $JBOSS_HOME ]; then
#check permission
p=$JBOSS_HOME
while [ $p != "/" ]; do
p=`dirname $p`
# if it's a directory but not writable
if [ -d $p ] && [ ! -w $p ]; then
echo -n -e "\nDirectory $p is not writable, cannot create $JBOSS_HOME."
echo -n -e "\n"
return 4
fi
done
mkdir -p $JBOSS_HOME
fi
#clone the directory if it doesn't exist (copy from
# /var/lib/$PACKAGENAME, depending if it is jbossas or jbossas-web)
if [ $JBOSS_HOME != "/var/lib/$PACKAGENAME" ] && [ ! -d $JBOSS_HOME ]; then
for dirname in `ls /var/lib/$PACKAGENAME`; do
if [ ! $dirname = "server" ]; then
cp -pL -R /var/lib/$PACKAGENAME/$dirname $JBOSS_HOME
else
for i in all default minimal standard web production; do
if [ ! -d /var/lib/$PACKAGENAME/$dirname/$i ]; then
continue
fi
mkdir -p $JBOSS_HOME/$dirname/$i
for j in `ls /var/lib/$PACKAGENAME/$dirname/$i` ; do
if [ ! $j = "log" ]; then
cp -pL -R /var/lib/$PACKAGENAME/$dirname/$i/$j $JBOSS_HOME/$dirname/$i/$j
fi
done
done
fi
done
fi
if [ ! -d $JBOSS_HOME/server/$JBOSSCONF/conf ]; then
if [ -d /var/lib/$PACKAGENAME/server/$JBOSSCONF ]; then
for i in `ls /var/lib/$PACKAGENAME/server/$JBOSSCONF` ; do
if [ ! $i == "log" ]; then
cp -pL -R /var/lib/$PACKAGENAME/server/$JBOSSCONF/$i $JBOSS_HOME/server/$JBOSSCONF/
fi
done
fi
fi
#make JBOSS_HOME owned by $JBOSSUS:$JBOSSGR
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR $JBOSS_HOME
fi
echo CMD_START = $CMD_START > $LOGFILE
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown $JBOSSUS:$JBOSSGR $LOGFILE
fi
if [ $JBOSSCONF == "ports-01" ] || [ $JBOSSCONF == "ports-02" ] || [ $JBOSSCONF == "ports-03" ] ; then
# update config file for the configuration
cp $JBOSS_HOME/server/$JBOSSCONF/conf/jboss-service.xml $JBOSS_HOME/server/$JBOSSCONF/conf/jboss-service.xml.orig
sedcom=s\/ports\-01\/$JBOSSCONF\/g
sed -e 's/implementation to create to obtain the ServicesStore instance./implementation to create to obtain the ServicesStore instance. \-\-\>/g' -e $sedcom -e '195,195s/-->//' $JBOSS_HOME/server/$JBOSSCONF/conf/jboss-service.xml.orig > $JBOSS_HOME/server/$JBOSSCONF/conf/jboss-service.xml
fi
# create the log directories if necessary
if [ ! -d /var/log/$NAME/all ]; then
mkdir -p /var/log/$NAME/all
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR /var/log/$NAME/all
fi
fi
if [ ! -d /var/log/$NAME/default ]; then
mkdir -p /var/log/$NAME/default
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR /var/log/$NAME/default
fi
fi
if [ ! -d /var/log/$NAME/minimal ]; then
mkdir -p /var/log/$NAME/minimal
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR /var/log/$NAME/minimal
fi
fi
if [ ! -d /var/log/$NAME/standard ]; then
mkdir -p /var/log/$NAME/standard
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR /var/log/$NAME/standard
fi
fi
if [ ! -d /var/log/$NAME/web ]; then
mkdir -p /var/log/$NAME/web
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR /var/log/$NAME/web
fi
fi
if [ "x$JBOSSCONF" = "xproduction" ]; then
if [ ! -d /var/log/$NAME/production ]; then
mkdir -p /var/log/$NAME/production
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR /var/log/$NAME/production
fi
fi
fi
if [ ! -d /var/log/$NAME/$JBOSSCONF ]; then
mkdir -p /var/log/$NAME/$JBOSSCONF
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown -R $JBOSSUS:$JBOSSGR /var/log/$NAME/$JBOSSCONF
fi
fi
cd $JBOSS_HOME/bin
# determine userid to start jboss
if [ -z "$SUBIT" ]; then
eval $CMD_START >>${JBOSS_CONSOLE} 2>&1 &
else
$SUBIT "export JAVA_HOME=$JAVA_HOME; export JAVA_OPTS=\"$JAVA_OPTS\";$CMD_START >>${JBOSS_CONSOLE} 2>&1 &"
fi
sleep=0
RETVAL=1
while [ $sleep -lt $JBOSS_START_TIMEOUT -a $RETVAL -eq 1 ]; do
# echo -n -e "\nwaiting for processes to start";
sleep 10
sleep=`expr $sleep + 10`
# if server.log has been updated
if [ $JBOSS_HOME/server/$JBOSSCONF/log/temp.file -ot $JBOSS_HOME/server/$JBOSSCONF/log/server.log ]; then
grep -q ' Started in ' $JBOSS_HOME/server/$JBOSSCONF/log/server.log > /dev/null 2>&1
if [ $? -eq 0 ]; then
RETVAL=0
fi
fi
pid=0
procrunning
if [ $pid == '0' ]; then
failure $"${NAME} startup"
echo -n -e "\nProcess crashed on startup"
echo
RETVAL=2
fi
done
rm $JBOSS_HOME/server/$JBOSSCONF/log/temp.file
if [ -r /etc/rc.d/init.d/functions ]; then
if [ $RETVAL -eq 0 ]; then
success $"${NAME} startup"
else
# check if the process is still running
pid=0
procrunning
if [ ! $pid = '0' ]; then
echo -n -e "\n${NAME} startup has timed out, process still running. \n"
echo
else
failure $"${NAME} startup"
fi
fi
fi
echo
[ $RETVAL = 0 ] && touch $JBOSSLOCK
pid=0
procrunning
if [ ! $pid = '0' ]; then
echo $pid > $JBOSSPID
if [ "$JBOSSUS" != "RUNASIS" ]; then
chown $JBOSSUS:$JBOSSGR $JBOSSPID
fi
fi
return $RETVAL
}
stop() {
echo -n $"Stopping ${NAME}: "
pid=0
procrunning
if [ $pid = '0' ]; then
failure $"${NAME} shutdown"
#echo -n -e "\nNo JBossAS is currently running\n"
if [ -f $JBOSSLOCK ]; then
rm -f $JBOSSLOCK
fi
if [ -f $JBOSSPID ]; then
rm -f $JBOSSPID
fi
return 1
fi
pid=0
RETVAL=1
procrunning
# If process is still running
# First, try to kill it nicely
if [ $RETVAL != 0 ] ; then
for id in `ps --ppid $pid | awk '{print $1}' | grep -v "^PID$"`; do
$SUBIT "kill -15 $id" 2>/dev/null
done
sleep=0
while [ $sleep -lt $JBOSS_STOP_TIMEOUT -a $RETVAL -eq 1 ]; do
#echo -n -e "\nwaiting for processes to stop";
sleep 10
sleep=`expr $sleep + 10`
grep -q "Shutdown complete" $JBOSS_HOME/server/$JBOSSCONF/log/server.log > /dev/null 2>&1
if [ $? -eq 0 ]; then
RETVAL=0
fi
pid=0
procrunning
if [ $pid == '0' ]; then
RETVAL=0
fi
done
fi
# Still not dead... notify user
count=0
pid=0
procrunning
if [ $pid != '0' ] ; then
jboss_java_pid=`ps --ppid $pid | grep java | awk '{print $1}'`
echo -e "\nTimeout: Shutdown command was sent, but process is still running with PID $jboss_java_pid"
failure $"${NAME} shutdown"
else
if [ -r /etc/rc.d/init.d/functions ]; then
success $"${NAME} shutdown"
fi
fi
echo
[ $RETVAL -eq 0 ] && rm -f $JBOSSLOCK $JBOSSPID
return $RETVAL
}
status() {
pid=0
procrunning
if [ $pid == 0 ]; then
if [ -f $JBOSSLOCK ]; then
echo "${NAME} is dead but subsys locked";
return 2
fi
if [ -f $JBOSSPID ]; then
echo "${NAME} is dead but pid file exists";
return 1
fi
echo "${NAME} is stopped";
return 3
else
echo "${NAME} (pid $pid) is running";
return 0
fi
}
# Restart only if process is already running
condrestart() {
pid=0
procrunning
if [ $pid != 0 ]; then
stop
sleep 3
start
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart|reload)
stop
sleep 3
start
;;
condrestart)
condrestart
;;
status)
status
RETVAL=$?
;;
help)
echo "usage: ${NAME} (start|stop|status|restart|help)"
;;
*)
echo "usage: ${NAME} (start|stop|status|restart|help)"
exit 1
esac
exit $RETVAL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment