#!/bin/bash NAME=asterisk USER=asterisk GROUP=asterisk RUNDIR=/var/run/$NAME PIDFILE=$RUNDIR/$NAME.pid STARTCMD="(cd /; /usr/sbin/asterisk -G $GROUP -U $USER)" STOPCMD="/usr/sbin/asterisk -r -x 'core stop now'" STOPGRACECMD="/usr/sbin/asterisk -r -x 'core stop gracefully'" STOPTIMEOUT=300 function getpid() { if [ -z "$PIDFILE" ]; then pid="$(pgrep -xfn "$STARTCMD")" else if [ -f "$PIDFILE" ]; then pid=$(< $PIDFILE) if [ ! -d /proc/"$pid" ]; then echo "$NAME: removing stale pidfile $PIDFILE" >&2 rm -f "$PIDFILE" unset pid fi fi fi echo "$pid" } case $1 in start) pid=$(getpid) install -d -m 755 -o $USER $RUNDIR || exit 1 if [ -n "$pid" ]; then echo "$NAME already running with pid $pid" >&2 exit 1 fi eval "$STARTCMD" ;; stop|stopnice) pid=$(getpid) if [ -n "$pid" ]; then if [ "$1" == "stop" ]; then if [ -n "$STOPCMD" ]; then eval "$STOPCMD" else kill "$pid" fi else if [ -n "$STOPCMD" ]; then eval "$STOPGRACECMD" else echo "$NAME: $1 not implemented" exit 1 fi fi t=$(printf '%(%s)T' -1) tend=$((t+STOPTIMEOUT)) while [ -d /proc/$pid -a $t -lt $tend ]; do sleep 0.5 t=$(printf '%(%s)T' -1) done if [ -d /proc/"$pid" ]; then echo "$NAME still running with pid $pid" >&2 else [ -n "$PIDFILE" ] && rm -f "$PIDFILE" fi else echo "$NAME is not running" >&2 fi ;; restart) $0 stop && \ $0 start ;; restartnice) $0 stopnice && \ $0 start ;; status) pid=$(getpid) if [ -n "$pid" ]; then echo "$NAME is running with pid $pid" else echo "$NAME is not running" fi ;; *) echo "usage: $0 [start|stop|stopnice|restart|restartnice|status]" ;; esac