Простой скрипт синхронизации сессий между 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 скрипт завершения сессий