Categorías
Cultura General Linux Seguridad Informática VOIP

Solución a Caída de troncales Asterisk

En ocaciones las troncales IAX de un servicio de telefonía entre Asterisk o hacia algún otro carrier que soporte el protocolo cae. debido a falta de servicio o a tiempos altos. por eso aqui veremos como dar solución a Solución fallo troncales Asterisk. El siguiente script no soluciona el problema, ya que debe ser revisado […]

En ocaciones las troncales IAX de un servicio de telefonía entre Asterisk o hacia algún otro carrier que soporte el protocolo cae. debido a falta de servicio o a tiempos altos. por eso aqui veremos como dar solución a Solución fallo troncales Asterisk.

El siguiente script no soluciona el problema, ya que debe ser revisado en temas de QoS, o configuracion de la troncal, sin embargo permite parchearlo mediante un servicio que valide si el servicio está activo o muerto. en caso de estar muerto manda a reiniciar el módulo de iax! de tal manera que vuelve a intentar los registros. Para hacer uso de el, debes copiar el codigo y ponerlo en un archivo bash, agregarlo al crontab y ponerlo en modo ejecutable.

1.- Bash para Solución fallo troncales Asterisk IAX

#!/bin/bash

#Autor: Andres Lavariega-lavariega.com andreslavariega@evolutel.com.mx
#Solución fallo troncales Asterisk
#Reiniciar el módulo de iax!
#de tal manera que vuelve a intentar los registros.
#No tira los servicios de asterisk ni reinicia el servidor

set -x

cd /root/
TEST=$(/usr/sbin/asterisk -rx "iax2 show peers" | grep OK | wc -l)
sleep 1
#Son dos troncales por lo que test es igual a dos

if [ TEST eq 2]
       then
            echo "todo bien"
            exit ##Se acaba
fi
date >> iax_down.log
/usr/sbin/asterisk -rx "module unload chan_iax2.so" > /dev/null
sleep 30;
/usr/sbin/asterisk -rx "module load chan_iax2.so" > /dev/null

2.- Bash para Solución fallo troncales Asterisk SIP

#!/bin/bash

#Autor: Andres Lavariega-lavariega.com andreslavariega@evolutel.com.mx
#Solución fallo troncales Asterisk
#Reiniciar el módulo de iax!
#de tal manera que vuelve a intentar los registros.
#No tira los servicios de asterisk ni reinicia el servidor

set -x

cd /root/
TEST=$(/usr/sbin/asterisk -rx "sip show peers" | grep OK | wc -l)
sleep 1
#Son dos troncales por lo que test es igual a dos

if [ TEST eq 2]
       then
            echo "todo bien"
            exit ##Se acaba
fi
date >> iax_down.log
/usr/sbin/asterisk -rx "module unload chan_sip.so" > /dev/null
sleep 30;
/usr/sbin/asterisk -rx "module load chan_sip.so" > /dev/null

3.- Ahora un crontab para automatizar el test

Ahora lo que faltaria es agregar el bash a un crontab, y ponerle tiempo de ejecución que consideres necesaria. en mi caso lo tengo cada 15 minutos. con esto tendrías un Solución fallo troncales Asterisk.

Si tienes un proyecto de telefonía, CRM o telecomunicaciones no dudes en invitarme! me gusta participar en estos proyectos aportando soluciones de valor. Te dejo mi correo para cualquier duda. andreslavariega@gmail.com , o tambien puedes dar clic en el botón de arriba a la derecha para mandarme algún mensaje .

Te recomeindo leer mi articulo sobre las bondades de una centralita con Asterisk. y un libro sobre asterisk en : http://172.236.115.75/aprende-asterisk-la-guia-definitiva/

Un saludo

7 respuestas en “Solución a Caída de troncales Asterisk”

Buenas hermano tu por casualidad haz configurado un telefono cisco cp 7820 en una central issabel si es asi puedes explicarme el proceso por favor y gracias

Hola Andrés, me parece excelente tu aporte. Yo hice algo similar, inspirado en tu trabajo. Que lo automatice en un crontab cada minuto, pero que la acción tenga un umbral de 30 minutos cuando esté caída la troncal PJSIP.
Te lo comparto:

#!/bin/bash

#archivo de registro que guarda la marca de tiempo de la última ejecución
LAST_RUN_FILE=”/root/registro_de_ejecucion”

# Obtener la fecha y hora actuales en segundos desde epoch
current_time=$(date +%s)

# Definir el umbral de ejecucion a de 30 minutos (en segundos)
threshold=$((30 * 60))

# Ejecuta el estado de troncal y guarda el resultado solo si está caída en una variable
output=$(/usr/sbin/asterisk -rx “pjsip show aor TroncalGustavo”)

# Revisa la línea que contiene “Contact:” si contiene “Unavail”
if echo “$output” | grep -q “Contact:.*Unavail”; then
# Verificar si el archivo de registro existe
if [ -f “$LAST_RUN_FILE” ]; then
# Leer la última marca de tiempo del archivo
last_run_time=$(cat “$LAST_RUN_FILE”)
# Calcular la diferencia de tiempo
time_diff=$((current_time – last_run_time))
else
# Si el archivo no existe, considera que la diferencia de tiempo es mayor al umbral.
time_diff=$((threshold + 1))
fi

# Verificar si la diferencia de tiempo es mayor o igual al umbral
if [ “$time_diff” -ge “$threshold” ]; then
# Ejecuta el script de alerta y acciones
/root/falla.sh
# Actualizar el archivo de registro con la marca de tiempo actual
echo “$current_time” > “$LAST_RUN_FILE”
fi
fi

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.