#! /bin/bash ### BEGIN INIT INFO # Provides: oversip # Required-Start: $syslog $network $remote_fs # Required-Stop: $syslog $network $remote_fs # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start/stop OverSIP # Description: Start/stop OverSIP ### END INIT INFO PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/var/lib/gems/1.9.1/bin NAME=oversip DESC=OverSIP HOMEDIR=/var/run/$NAME PIDFILE_NAME=$NAME.pid RUN=no RUBY_GEM=$NAME RUBY_EXE=ruby1.9.1 . /lib/lsb/init-functions # Debian LSB functions don't add \n in function log_begin_msg(). # In Ubuntu such function is overriden in /etc/lsb-base-logging.sh. UBUNTU_LOGGING=0 [ -r /etc/lsb-base-logging.sh ] && UBUNTU_LOGGING=1 [ -r /etc/default/$NAME ] && . /etc/default/$NAME # Checks for the start action. if [ "$1" == "start" ] || [ "$1" == "restart" ] || [ "$1" == "force-reload" ] ; then # Ensure that the admin has set RUN=yes in /etc/default/$NAME file. if [ "$RUN" != "yes" ] ; then log_failure_msg "$DESC ($NAME) not yet configured. Set RUN=yes in /etc/default/$NAME." exit 0 fi # Ensure Ruby executable is installed. which $RUBY_EXE >/dev/null if [ $? -ne 0 ] ; then log_failure_msg "ruby1.9.1 is not installed, exiting." log_end_msg 5 exit 5 fi # Check whether OverSIP Ruby Gem is installed and get the executable location. DAEMON=$(which $NAME) if [ $? -ne 0 ] ; then log_failure_msg "$DESC ($NAME): Ruby Gem '$RUBY_GEM' is not installed, exiting." case "$1" in status) # LSB - 4: program or service status is unknown. log_end_msg 4 exit 4 ;; *) # LSB - 5: program is not installed. log_end_msg 5 exit 5 ;; esac fi fi PIDFILE="${HOMEDIR}/${PIDFILE_NAME}" OPTIONS="-P ${PIDFILE}" if [ -n "$USER" ] ; then OPTIONS="${OPTIONS} -u ${USER}" fi if [ -n "$GROUP" ] ; then OPTIONS="${OPTIONS} -g ${GROUP}" fi check_homedir() { # Create HOMEDIR directory in case it doesn't exist. # Useful in Ubuntu as /var/run/ content is deleted in shutdown. if [ ! -d $HOMEDIR ] ; then mkdir $HOMEDIR ; fi # Set the appropiate owner and group if [ -n "$USER" ] ; then chown ${USER} $HOMEDIR ; fi if [ -n "$GROUP" ] ; then chgrp ${GROUP} $HOMEDIR ; fi } # Return values: # - 3: oversip is not running. # - 0: oversip is running. # - 1: oversip is not running but PID file exists. get_status() { if [ ! -r "$PIDFILE" ]; then return 3 fi if read pid < "$PIDFILE" && ps -p "$pid" > /dev/null 2>&1; then return 0 else return 1 fi } start() { set +e get_status case $? in 0) # Already running, do nothing. log_warning_msg "already running." exit 0 ;; 3) # Not running, start it. ;; 1) # Not running but PID file exists, remove it and start. log_warning_msg "not running but PID file '$PIDFILE' exists, deleting it." rm "$PIDFILE" ;; esac start-stop-daemon --start --quiet --pidfile $PIDFILE --quiet \ --exec $DAEMON -- $OPTIONS res=$? if [ $res -eq 0 ] ; then log_end_msg 0 exit 0 else if [ ! -r "$PIDFILE" ]; then log_failure_msg "error, failed to start." log_end_msg 1 exit 1 else log_failure_msg "error, failed to start (and PID file '$PIDFILE' exists)." log_end_msg 1 exit 1 fi fi } set -e case "$1" in start) check_homedir log_daemon_msg "Starting $DESC ($NAME)" echo set +e start ;; stop) log_daemon_msg "Stopping $DESC ($NAME)" echo set +e start-stop-daemon --oknodo --stop --pidfile $PIDFILE --quiet \ --name $NAME res=$? if [ $res -eq 0 ] ; then log_end_msg 0 # Posix MQueue for syslogging is created with owner root (to ensure # rlimits and so) so it cannot be deleted by a non root user when # stopping the server. This command removes the mqueue when performing # the "stop" action. $DAEMON --remove-mqueue "/${NAME}_syslogger" 2>/dev/null exit 0 else log_failure_msg "error, failed to stop." log_end_msg 1 exit 1 fi ;; restart|force-reload) log_daemon_msg "Restarting $DESC ($NAME)" echo set +e start-stop-daemon --oknodo --stop --pidfile $PIDFILE --retry=5 --quiet \ --name $NAME if [ $? -ne 0 ] ; then log_failure_msg "error, failed to stop." log_end_msg 1 exit 1 fi check_homedir start ;; status) set +e get_status case $? in 3) # Not running. log_begin_msg "$DESC ($NAME) is not running." [ $UBUNTU_LOGGING -eq 0 ] && echo exit 3 ;; 0) # Running. log_begin_msg "$DESC ($NAME) is running." [ $UBUNTU_LOGGING -eq 0 ] && echo exit 0 ;; 1) # Not running but PID file exists. log_warning_msg "$DESC ($NAME) is not running but PID file '$PIDFILE' exists." exit 1 ;; esac ;; *) log_failure_msg "Usage: /etc/init.d/$NAME {start|stop|restart|force-reload|status}." exit 1 ;; esac