Автоматический перезапуск Asterisk

  • proGroup
  • 3320
  • 0 Комментариев
  • Аsterisk, автозапуск

Бывает, что по какой то причине завершается процесс Asterisk и перестают приходить звонки, часто эта оплошность замечается не сразу и как следствие этого - не дозвонившиеся клиенты.

Для того, что бы исправить такое положение дел нужно в файле запуска Asterrisk

/etc/init.d/asterisk

добавить переменную

# Full path to safe_asterisk script
SAFE_ASTERISK=/usr/sbin/safe_asterisk

и в case start добавить

    if [ -f $SAFE_ASTERISK ] ; then
        DAEMON=$SAFE_ASTERISK
    fi

В итоге должен получиться файл запуска такого вида

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=asterisk
DESC="Asterisk PBX"
# Full path to asterisk binary
DAEMON=/usr/sbin/asterisk
ASTVARRUNDIR=/var/run/asterisk
ASTETCDIR=/etc/asterisk
TRUE=/bin/true

# Full path to safe_asterisk script
SAFE_ASTERISK=/usr/sbin/safe_asterisk

### BEGIN INIT INFO
# Provides:        asterisk
# Required-Start:    $network $syslog $named $local_fs $remote_fs
# Required-Stop:     $network $syslog $named $local_fs $remote_fs
# Should-Start:      dahdi misdn lcr wanrouter mysql postgresql
# Should-Stop:       dahdi misdn lcr wanrouter mysql postgresql
# Default-Start:    2 3 4 5
# Default-Stop:        0 1 6
# Short-Description:    Asterisk PBX
# Description:        the Asterisk Open Source PBX
### END INIT INFO

set -e

if ! [ -x $DAEMON ] ; then
        echo "ERROR: $DAEMON not found"
        exit 0
fi

if ! [ -d $ASTETCDIR ] ; then
        echo "ERROR: $ASTETCDIR directory not found"
        exit 0
fi

# Use the LSB standard functions for services management
. /lib/lsb/init-functions

# Allow configuration overrides in /etc/default/asterisk
CONFIG0=`readlink $0 || :` # readlink returns 1 when something isn't a symlink
if [ "$CONFIG0" = "" ]; then
    CONFIGFILE=/etc/default/`basename $0`
else
    CONFIGFILE=/etc/default/`basename $CONFIG0`
fi
[ -r $CONFIGFILE ] && . $CONFIGFILE

case "$1" in
  start)
    # Check if Asterisk is already running.  If it is, then bug out, because
    # starting up Asterisk when Asterisk is already running is very bad.
    VERSION=`${DAEMON} -rx 'core show version' 2>/dev/null || ${TRUE}`
    if [ "`echo $VERSION | cut -c 1-8`" = "Asterisk" ]; then
        echo "Asterisk is already running.  $0 will exit now."
        exit 0
    fi

    log_begin_msg "Starting $DESC: $NAME"
    if [ ! -d $ASTVARRUNDIR ]; then
        mkdir -p $ASTVARRUNDIR
    fi
    if [ $AST_USER ] ; then
        ASTARGS="-U $AST_USER"
        chown $AST_USER $ASTVARRUNDIR
    fi
    if [ $AST_GROUP ] ; then
        ASTARGS="$ASTARGS -G $AST_GROUP"
        chgrp $AST_GROUP $ASTVARRUNDIR
    fi
    if [ $ALTCONF ]; then
        ASTARGS="$ASTARGS -C \"$ALTCONF\""
    fi
    if [ "x$COREDUMP" = "xyes" ]; then
        ASTARGS="$ASTARGS -g"
    fi
    if [ "0$MAXLOAD" -gt "0" ]; then
        ASTARGS="$ASTARGS -L $MAXLOAD"
    fi
    if [ "0$MAXCALLS" -gt "0" ]; then
        ASTARGS="$ASTARGS -M $MAXCALLS"
    fi
    if [ "0$VERBOSITY" -gt "0" ]; then
        for i in `seq 1 $VERBOSITY`; do
            ASTARGS="$ASTARGS -v"
        done
        # -v implies -f, so we override that implicit specification here
        ASTARGS="$ASTARGS -F"
    fi
    if [ "x$INTERNALTIMING" = "xyes" ]; then
        ASTARGS="$ASTARGS -I"
    fi
    if [ "x$TEMPRECORDINGLOCATION" = "xyes" -o "x$TMPRECORDINGLOCATION" = "xyes" ]; then
        ASTARGS="$ASTARGS -t"
    fi
    if test "x$COLOR" = "xno" ; then
        ASTARGS="$ASTARGS -n"
    fi

    if [ -f $SAFE_ASTERISK ] ; then
        DAEMON=$SAFE_ASTERISK
    fi

    # "start-stop-daemon --oknodo" returns 0 even if Asterisk was already running (as LSB expects):
    start-stop-daemon --start --oknodo --exec $DAEMON -- $ASTARGS
    log_end_msg $?
    ;;
  stop)
    log_begin_msg "Stopping $DESC: $NAME"
    # "start-stop-daemon --oknodo" returns 0 even if Asterisk was already stopped (as LSB expects):
    start-stop-daemon --stop --oknodo --exec $DAEMON
    log_end_msg $?
    ;;
  reload)
    echo "Reloading $DESC configuration files."
    $DAEMON -rx 'module reload' > /dev/null 2> /dev/null
    ;;
  restart|force-reload)
    $0 stop
    sleep 2  # It needs some time to really be stopped.
    $0 start
    # "restart|force-reload" starts Asterisk and returns 0 even if Asterisk was stopped (as LSB expects).
    ;;
  status)
       status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
       ;;
  *)
    N=/etc/init.d/$NAME
    echo "Usage: $N {start|stop|restart|reload|force-reload|status}" >&2
    exit 1
    ;;
esac

Далее просто перезапускаем  Аsterisk и можем проверить автоматический запуск убив текущий процесс Asteriska.

0 Комментарии

    Вы должны авторизоваться, чтобы оставлять комментарии.

    Вы можете авторизоваться на сайте через: