Скрипт синхронизации сессий Accel-ppp и ABillS

Простой скрипт синхронизации сессий между Accel-ppp и ABillS.

При 5к ipoe клиентов я не замечал рассинхронизацию сессий клиентов, однако у некоторых знакомых она была, поэтому просто оставлю здесь для вас этот простенький скрипт, автор скрипта Nikolay Onyshchenko (@KROLb):

#!/bin/bash
/usr/bin/accel-cmd show sessions ip order ip | sed 's/ //g; /^[[:blank:]]*$/ d; /-----------------/ d; /ip/ d' | sort > /tmp/accel-ips
/usr/bin/dos2unix /tmp/accel-ips

#/usr/bin/mysql --batch -N -u root abills -e "select INET_NTOA(framed_ip_address) from internet_online" | sort > /tmp/abills-ips
/usr/bin/mysql --batch -N -u root abills -e "select INET_NTOA(framed_ip_address) from internet_online where status='3'" | sort > /tmp/abills-ips
/usr/bin/dos2unix /tmp/abills-ips

for i in `cat /tmp/accel-ips`
do
  count=`cat /tmp/abills-ips | /bin/grep $i | wc -l`
  #echo "Different in sessions: $count"
  if [[ $count -lt 1 ]]; then
    #/usr/bin/accel-cmd terminate ip $i hard
    /usr/bin/accel-cmd terminate ip $i soft
    #sleep 1
    echo "Soft terminate for $i"
  fi
done

Не забываем установить dos2unix:

apt install dos2unix

Если биллинг и accel-ppp на разных серверах, то можно передавать файлы со списком сессий например по ssh(scp) либо подключаться к базе данных дистанционно, например я изменил скрипт к такому виду:

#!/bin/bash
/usr/bin/accel-cmd -P pass -H192.168.5.5 show sessions ip order ip | sed 's/ //g; /^[[:blank:]]*$/ d; /-----------------/ d; /ip/ d' | sort > /tmp/accel-ips
/usr/bin/dos2unix /tmp/accel-ips

#/usr/bin/mysql --batch -N -u USERNAME -pPASSWORDHERE -h 192.168.5.10 -D abills -e "select INET_NTOA(framed_ip_address) from internet_online where status='3'" | sort > /tmp/abills-ips
/usr/bin/mysql --batch -N -u USERNAME -pPASSWORDHERE -h 192.168.5.10 -D abills -e "select INET_NTOA(framed_ip_address) from internet_online" | sort > /tmp/abills-ips
/usr/bin/dos2unix /tmp/abills-ips

for i in `cat /tmp/accel-ips`
do
  count=`cat /tmp/abills-ips | /bin/grep $i | wc -l`
  #echo "Different in sessions: $count"
  if [[ $count -lt 1 ]]; then
    #/usr/bin/accel-cmd terminate ip $i hard
    #/usr/bin/accel-cmd terminate ip $i soft
    echo $i >> /tmp/test.txt
#sleep 1
    echo "Soft terminate for $i"
  fi
done

Также в скрипте я закомментировал завершение сессий и указал запись несуществующих сессий в файл /tmp/test.txt, это желательно сделать при первом запуске для проверки скрипта, к примеру если скрипт не сможет подключиться к mysql, то в этом случае он начнет завершать все сессии, так как файл /tmp/abills-ips будет пустым.

Смотрите также мою статью:
Accel-ppp скрипт завершения сессий

Оставьте комментарий

Добавить комментарий