#! /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 # LD_LIBRARY_PATH=/usr/local/lib PATH=INSTALLDIR/usr/sbin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin NAME=asterisk USER=$NAME GROUP=$USER DAEMON=INSTALLDIR/usr/sbin/$NAME DESC="Asterisk PBX" PIDFILE="INSTALLDIR/var/run/asterisk/asterisk.pid" ASTSAFE_PIDFILE="INSTALLDIR/var/run/asterisk/asterisk_safe.pid" UMASK=007 # by default # by default: use real-time priority PARAMS="" AST_REALTIME="no" #AST_REALTIME="yes" RUNASTERISK="yes" 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 0 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 if [ "$UMASK" != '' ] then umask $UMASK fi asterisk_rx() { if ! status >/dev/null; then return 0; fi $DAEMON -rx "$1" } 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 } asterisk_start(){ if status > /dev/null; then echo "$DESC is already running. Use restart." exit 0 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 0 fi start-stop-daemon --start --group $GROUP --pidfile "$PIDFILE" \ --exec $REALDAEMON -- $PARAMS else start-stop-daemon --start --group $GROUP --make-pidfile \ --pidfile "$ASTSAFE_PIDFILE" \ --exec $REALDAEMON -- $PARAMS fi echo "$NAME." } asterisk_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 --pidfile $ASTSAFE_PIDFILE --oknodo \ --stop 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 $DAEMON echo "." } case "$1" in asteriskstart) asterisk_start ;; asteriskstop) asterisk_stop ;; asteriskrestart) asterisk_stop sleep 2 asterisk_start ;; 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 ;; reload) echo "Reloading $DESC configuration files." asterisk_rx 'reload' ;; logger-reload) asterisk_rx 'logger reload' ;; extensions-reload) echo "Reloading $DESC configuration files." asterisk_rx 'extensions reload' ;; restart|force-reload) $0 stop $0 start ;; status) status exit $? ;; zaptel-fix) echo "Unloading and reloading loading Asterisk and Zaptel:" $0 stop /etc/init.d/zaptel unload # load modules from /etc/modules. This will break if you count on # discover/hotplug /etc/init.d/module-init-tools /etc/init.d/zaptel start $0 start ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|restart|asteriskstart|asteriskstop|asteriskrestart"\ "|reload|status|debug|logger-reload|extensions-reload|force-reload}" >&2 exit 1 ;; esac exit 0