#! /bin/sh # # asterisk start the asterisk PBX # (c) Mark Purcell # May be distributed under the terms of this General Public License # # Based on: # # skeleton example file to build /etc/init.d/ scripts. # This file should be used to construct scripts for /etc/init.d. # # Written by Miquel van Smoorenburg . # Modified for Debian GNU/Linux # by Ian Murdock . # # Version: @(#)skeleton 1.9 26-Feb-2001 miquels@cistron.nl # PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=asterisk USER=$NAME GROUP=$USER DAEMON=/usr/sbin/$NAME DESC="Asterisk PBX" PIDFILE="/var/run/asterisk/asterisk.pid" # by default: use real-time priority PARAMS="" AST_REALTIME="yes" RUNASTERISK="no" if [ -r /etc/default/$NAME ]; then . /etc/default/$NAME; fi if [ "$RUNASTERISK" != "yes" ];then echo "Asterisk not yet configured. Edit /etc/default/asterisk first." exit 1 fi if [ "$AST_REALTIME" != "no" ] then PARAMS="$PARAMS -p" fi if [ "x$USER" = "x" ] then echo "Error: empty USER name" exit 1 fi if [ `id -u "$USER"` = 0 ] then echo "Starting as root not supported." exit 1 fi PARAMS="$PARAMS -U $USER" if [ "x$AST_DEBUG_PARAMS" = x ] then AST_DEBUG_PARAMS=-cvvvvvddddd fi if [ "$RUNASTSAFE" = "yes" ];then # The value of WRAPPER_DAEMON in can be set in /etc/default/asterisk WRAPPER_DAEMON=${WRAPPER_DAEMON:-/usr/sbin/safe_asterisk} REALDAEMON="$WRAPPER_DAEMON" else REALDAEMON="$DAEMON" fi test -x $DAEMON || exit 0 set -e status() { plist=`ps auxw | grep "$DAEMON" | grep -v grep | awk '{print $2}' | tr '\012' ' '` if [ "$plist" = "" ]; then echo "$DESC is stopped" return 1 else echo "$DESC is running: $plist" return 0 fi } case "$1" in debug) # we add too many special parameters that I don't want to skip # accidentally. I'm afraid that skipping -U once may cause # confusing results. I also want to maintain the user's choice # of -p echo "Debugging $DESC: " $DAEMON $PARAMS $AST_DEBUG_PARAMS exit 0 ;; start) if status > /dev/null; then echo "$DESC is already running. Use restart." exit 1 fi echo -n "Starting $DESC: " if [ "$RUNASTSAFE" != "yes" ];then # TODO: what if we cought the wrapper just as its asterisk # was killed? status should check for the wrapper if we're in # "safe mode" if status > /dev/null; then echo "$DESC is already running. Use restart." exit 1 fi fi echo -n "Starting $DESC: " start-stop-daemon --start --group $GROUP --pidfile "$PIDFILE" \ --exec $REALDAEMON -- $PARAMS echo "$NAME." ;; stop) echo -n "Stopping $DESC: " if [ "$RUNASTSAFE" = "yes" ];then # hopefully this will work. Untested $REALDAEMON -rx 'stop now' > /dev/null || true else # Try gracefully. # this may hang in some cases. Specifically, when the asterisk # processes is stopped. No bother to worry about cleanup: # it will either fail or die when asterisk dies. ( $DAEMON -rx 'stop now' > /dev/null 2>&1 & ) & fi echo -n "$NAME" ## giving a small grace time to shut down cleanly. #sleep 2 # you can add timeouts in the comma if [ "$RUNASTSAFE" = "yes" ];then start-stop-daemon --quiet --oknodo --stop --exec $WRAPPER_DAEMON fi # just making sure it's really, really dead. # KILL is necessary just in case there's an asterisk -r in the background start-stop-daemon --stop --quiet --oknodo --retry=0/2/TERM/2/KILL/5 --exec $REALDAEMON echo "." ;; reload) echo "Reloading $DESC configuration files." $DAEMON -rx 'reload' ;; logger-reload) $DAEMON -rx 'logger reload' ;; extensions-reload) echo "Reloading $DESC configuration files." $DAEMON -rx 'extensions reload' ;; restart|force-reload) $0 stop $0 start ;; status) status exit $? ;; *) N=/etc/init.d/$NAME # echo "Usage: $N {start|stop|restart|reload|logger-reload|extensions-reload|force-reload}" >&2 echo "Usage: $N {start|stop|status|debug|restart|force-reload}" >&2 exit 1 ;; esac exit 0