文件名 check_signal.sh
#!/bin/bashexport PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin# 检查 Asterisk 服务是否运行if ! pidof asterisk >/dev/null; thenecho "Asterisk service is not running. Exiting..."exit 1ficheck_device_state() {local device_name=$1local device_state=$(asterisk -rx "quectel show device state $device_name" | grep -E "State\s+:" | awk '{print $3}')echo "$device_state"}check_device_voice() {local device_name=$1local voice_state=$(asterisk -rx "quectel show device state $device_name" | grep -E "Voice\s+:" | awk '{print $3}')echo "$voice_state"}device_info=$(asterisk -rx "quectel show devices" | grep -E "\s99" | awk '{print $1}')for line in $device_info; do# 定义设备名称device_name=${line%% *}# 获取设备状态device_state=$(check_device_state "$device_name")# 判断设备状态是否为 Freeif [[ $device_state == "Free" ]]; thenecho "$device_name signal 99!"asterisk -rx "quectel restart now $device_name"fidone#检查voice是否开启device_info=$(asterisk -rx "quectel show devices" | grep -E "Free|Dialing" | awk '{print $1}')need_push=0for line in $device_info; do# 定义设备名称device_name=${line%% *}# 获取设备状态voice_state=$(check_device_voice "$device_name")#echo "$device_name Voice:$voice_state"# 判断设备状态是否为 Freeif [[ $voice_state == "No" ]]; thenecho "$device_name Voice not open"asterisk -rx "quectel restart now $device_name"sleep 2#尝试重启,再查一次voice_state=$(check_device_voice "$device_name")if [[ $voice_state == "No" ]]; then/etc/asterisk/sh/tell_qy.sh "$device_name Voice无法打开,触发禁用,尝试修复无效,请尝试手动插拔"asterisk -rx "quectel stop now $device_name"need_push=1fifidoneif [[ $need_push == 1 ]]; thensleep 2/etc/asterisk/sh/node_check.shfi