blob: 5be4eb6514c6322195b3054733fc2e093d09a1ee [file] [log] [blame]
#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# Hue web server
#
# chkconfig: 345 90 10
# description: Hue web server
# pidfile: /var/run/hue/supervisor.pid
#
### BEGIN INIT INFO
# Provides: hue_webserver
# Required-Start: $syslog $remote_fs
# Should-Start:
# Required-Stop: $syslog $remote_fs
# Should-Stop:
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: Hue web server
### END INIT INFO
source /lib/lsb/init-functions
STATUS_RUNNING=0
STATUS_DEAD=1
STATUS_DEAD_AND_LOCK=2
STATUS_NOT_RUNNING=3
ERROR_PROGRAM_NOT_INSTALLED=5
ERROR_PROGRAM_NOT_CONFIGURED=6
RETVAL=0
LOCKFILE=/var/lock/subsys/hue_webserver
LOGDIR=/var/log/hue # Log directory to use
PIDFILE=/var/run/hue/supervisor.pid
DAEMON=/usr/lib/hue/build/env/bin/supervisor # Introduce the server's location here
DAEMON_OPTS="-p $PIDFILE -l $LOGDIR -d"
DESC="Hue web server"
USER=hue
HUE_SHUTDOWN_TIMEOUT=15
export PYTHON_EGG_CACHE=/tmp/.hue-python-eggs
hue_start() {
[ -x $DAEMON ] || exit $ERROR_PROGRAM_NOT_INSTALLED
log_success_msg "Starting $DESC: "
for dir in $(dirname $PIDFILE) $LOGDIR ${PYTHON_EGG_CACHE}
do
mkdir -p $dir
chown -R $USER $dir
done
PATH=/usr/lib/hue/build/env/bin:$PATH start_daemon -u $USER $DAEMON $DAEMON_OPTS
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $LOCKFILE
return $RETVAL
}
hue_stop() {
if [ ! -e $PIDFILE ]; then
log_success_msg "Hue is not running"
return 0
fi
log_success_msg "Stopping $DESC: "
HUE_PID=`cat $PIDFILE 2>/dev/null`
if [ -n "$HUE_PID" ]; then
kill -TERM ${HUE_PID} &>/dev/null
for i in `seq 1 ${HUE_SHUTDOWN_TIMEOUT}` ; do
kill -0 ${HUE_PID} &>/dev/null || break
sleep 1
done
kill -KILL ${HUE_PID} &>/dev/null
fi
echo
rm -f $LOCKFILE $PIDFILE
RETVAL=0
return $RETVAL
}
hue_restart() {
hue_stop
hue_start
}
checkstatus(){
pid=`cat "$PIDFILE" 2>/dev/null`
if [ "$pid" = '' ]; then
# The pidfile probably does not exist or is empty.
if [ -e $LOCKFILE ]; then
log_failure_msg "$DESC is dead and lock file exists"
RETVAL=$STATUS_DEAD_AND_LOCK
else
log_failure_msg "$DESC is not running"
RETVAL=$STATUS_NOT_RUNNING
fi
return $RETVAL
fi
set -- $pid
pid="$1"
ps -fp $pid | grep $pid | grep -i hue > /dev/null 2>&1
status=$?
if [ "$status" = 0 ]; then
log_success_msg "$DESC is running"
RETVAL=$STATUS_RUNNING
elif [ -e $LOCKFILE ]; then
log_failure_msg "$DESC is dead and lock file exists"
RETVAL=$STATUS_DEAD_AND_LOCK
else
# pidfile exists, that's how we ended up here (by checking the
# the pid's status through ps
log_failure_msg "$DESC is dead and pid file exists"
RETVAL=$STATUS_DEAD
fi
return $RETVAL
}
hue_condrestart(){
[ -e $LOCKFILE ] && restart || :
}
check_for_root() {
if [ $(id -ur) -ne 0 ]; then
echo 'Error: root user required'
echo
exit 1
fi
}
service() {
case "$1" in
start)
check_for_root
hue_start
;;
stop)
check_for_root
hue_stop
;;
status)
checkstatus
;;
restart)
check_for_root
hue_restart
;;
condrestart|try-restart)
check_for_root
hue_condrestart
;;
*)
echo $"Usage: $0 {start|stop|status|restart|try-restart|condrestart}"
exit 1
esac
}
service "$1"
exit $RETVAL