openfire 4.33 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195
#!/bin/sh
#
# openfire	Stops and starts the Openfire XMPP service.
#
# chkconfig: 2345 99 1
# description: Openfire is an XMPP server, which is a server that facilitates \
#              XML based communication, such as chat.
# config: /opt/openfire/conf/openfire.xml
# config: /etc/sysconfig/openfire
# pidfile: /var/run/openfire.pid
# 
# This script has currently been tested on Redhat, CentOS, and Fedora  based
# systems.
#

#####
# Begin setup work
#####

# Initialization
PATH="/sbin:/bin:/usr/bin:/usr/sbin"
RETVAL=0

# Check that we are root ... so non-root users stop here.
[ "`id -u`" = 0 ] || exit 1

# Get config.
[ -f "/etc/sysconfig/openfire" ] && . /etc/sysconfig/openfire

# If openfire user is not set in sysconfig, set to daemon.
[ -z "$OPENFIRE_USER" ] && OPENFIRE_USER="daemon"

# If pid file path is not set in sysconfig, set to /var/run/openfire.pid.
[ -z "$OPENFIRE_PIDFILE" ] && OPENFIRE_PIDFILE="/var/run/openfire.pid"

# -----------------------------------------------------------------

# If a openfire home variable has not been specified, try to determine it.
if [ -z "$OPENFIRE_HOME" -o ! -d "$OPENFIRE_HOME" ]; then
	if [ -d "/usr/share/openfire" ]; then
		OPENFIRE_HOME="/usr/share/openfire"
	elif [ -d "/usr/local/openfire" ]; then
		OPENFIRE_HOME="/usr/local/openfire"
	elif [ -d "/opt/openfire" ]; then
		OPENFIRE_HOME="/opt/openfire"
	else
		echo "Could not find Openfire installation under /opt, /usr/share, or /usr/local."
		echo "Please specify the Openfire installation location as variable OPENFIRE_HOME"
		echo "in /etc/sysconfig/openfire."
		exit 1
	fi
fi

# If log path is not set in sysconfig, set to $OPENFIRE_HOME/logs.
[ -z "$OPENFIRE_LOGDIR" ] && OPENFIRE_LOGDIR="${OPENFIRE_HOME}/logs"

# Attempt to locate java installation.
if [ -z "$JAVA_HOME" ]; then
	if [ -d "${OPENFIRE_HOME}/jre" ]; then
		JAVA_HOME="${OPENFIRE_HOME}/jre"
	elif [ -d "/etc/alternatives/jre" ]; then
		JAVA_HOME="/etc/alternatives/jre"
	else
		jdks=`ls -r1d /usr/java/j*`
		for jdk in $jdks; do
			if [ -f "${jdk}/bin/java" ]; then
				JAVA_HOME="$jdk"
				break
			fi
		done
	fi
fi
JAVACMD="${JAVA_HOME}/bin/java"

if [ ! -d "$JAVA_HOME" -o ! -x "$JAVACMD" ]; then
	echo "Error: JAVA_HOME is not defined correctly."
	echo "       Can not sure execute $JAVACMD."
	exit 1
fi

# Prepare location of openfire libraries
OPENFIRE_LIB="${OPENFIRE_HOME}/lib"

# Prepare openfire command line
OPENFIRE_OPTS="${OPENFIRE_OPTS} -DopenfireHome=${OPENFIRE_HOME} -Dopenfire.lib.dir=${OPENFIRE_LIB}"

# Prepare local java class path
if [ -z "$LOCALCLASSPATH" ]; then
	LOCALCLASSPATH="${OPENFIRE_LIB}/startup.jar"
else
	LOCALCLASSPATH="${OPENFIRE_LIB}/startup.jar:${LOCALCLASSPATH}"
fi

# Export any necessary variables
export JAVA_HOME JAVACMD

# Lastly, prepare the full command that we are going to run.
OPENFIRE_RUN_CMD="${JAVACMD} -server ${OPENFIRE_OPTS} -classpath \"${LOCALCLASSPATH}\" -jar \"${OPENFIRE_LIB}/startup.jar\""

#####
# End setup work
#####



start() {
	OLD_PWD=`pwd`
	cd $OPENFIRE_LOGDIR

        # Start daemons.
        echo -n "Starting openfire: "

	su -s /bin/sh -c "$OPENFIRE_RUN_CMD" $OPENFIRE_USER > nohup.out 2>&1 &
	RETVAL=$?
	PID=$!

	if [ $RETVAL -eq 0 -a ! -z "$OPENFIRE_PIDFILE" ]; then
		echo $PID > $OPENFIRE_PIDFILE
	fi

	echo

	[ $RETVAL -eq 0 -a -d /var/lock/subsys ] && touch /var/lock/subsys/openfire

	sleep 1 # allows prompt to return
	cd $OLD_PWD
}

stop() {
	# Stop daemons.
	echo -n "Shutting down openfire: "

	[ -f "$OPENFIRE_PIDFILE" ] && kill `cat $OPENFIRE_PIDFILE`
	RETVAL=$?
	echo

	[ $RETVAL -eq 0 -a -f "$OPENFIRE_PIDFILE" ] && rm -f $OPENFIRE_PIDFILE
	[ $RETVAL -eq 0 -a -f "/var/lock/subsys/openfire" ] && rm -f /var/lock/subsys/openfire
}

restart() {
	stop
	sleep 10 # give it a few moments to shut down
	start
}

condrestart() {
	[ -e "/var/lock/subsys/openfire" ] && restart
	return 0
}

status() {
	pid=`cat $OPENFIRE_PIDFILE 2>&1`
	if [ "$?" = "1" ]; then
		echo "openfire is not running"
		RETVAL=0
	else 
		ps -p $pid > /dev/null 2>&1
		if [ "$?" = "0" ]; then 
			echo "openfire is running"
			RETVAL=0
		else 
			echo "openfire is not running"
			RETVAL=0
		fi
	fi
}


# Handle how we were called.
case "$1" in
	start)
		start
		;;
	stop)
		stop
		;;
	restart)
		restart
		;;
	condrestart)
		condrestart
		;;
	reload)
		restart
		;;
	status) 
		status
		;;
	*)
		echo "Usage $0 {start|stop|restart|status|condrestart|reload}"
		RETVAL=1
esac

exit $RETVAL