DarkSpider 36 Posted 2011-08-19 11:39:48 Share Posted 2011-08-19 11:39:48 Перелопатил поиск. Либо руки не оттуда растут либо не увидел данной функции. Подскажите как правильней сделать : есть 3 тарифа (пример) u_1024 u_2048 u_3096 Хочу всем удвоить скорость. Возникла мысль просто изменить название тарифов на : u_2048 u_4096 u_6144 (скорость берется из названия). Как правильно реализовать ? Пока вижу только 1 вариант - скриптом : ввести новые тарифы и скриптом (кстати СТГ научился работать с КК без слипов, а то стремна ?) вычислять скорость каждого и через КК менять на нужную. или теоретически : Есть файлы тарифов: u_1024.tf - просто сменить им имя и рестартить СТГ. Link to post Share on other sites
S_ergey 21 Posted 2011-08-19 12:28:38 Share Posted 2011-08-19 12:28:38 Я завожу новые тарифы и меняю скриптом. Если просто переименовать тарифы то стг не стартанет. Link to post Share on other sites
DarkSpider 36 Posted 2011-08-19 12:34:55 Author Share Posted 2011-08-19 12:34:55 Я завожу новые тарифы и меняю скриптом. Если просто переименовать тарифы то стг не стартанет. Так и думал. но надеялся есть способ проще. В целом проблемы то и нет, но если есть варианты интереснее - готов выслушать. Link to post Share on other sites
Небесный 26 Posted 2011-08-19 15:04:47 Share Posted 2011-08-19 15:04:47 Не совсем понял - поменять вовсе скорость всем или менять только в определенное время? Если поменять вовсе всем. Остановить стж пробежаться скриптом по юзерам, толи это в файлах, толи это в СУБД и изменить название тарифа, предварительно создав новые тарифы. Если у вас линукс и это нужно менять на ночь, тогда эти скрипты вам в помощь. Короче где-то так, может где-то есть опечатка - сори, на быструю руку упростил от своих скриптов. Этот скрипт запускаем по крону где-то в 00:01 и в 10:01 10:01 можно менять - думаю разберетесь где. #!/bin/bash # переменные #################################### int_iface_up=eth0 int_iface_down=eth1 default_speed=64kbit #################################### function fspeedkb() { ftariff=$1 speed=$(echo "$ftariff" | sed "s/[^0-9]//g") if [ "$speed" != "" ] then if [ `date +"%H:%M"` \< "10:00" ] then fspeedkb=$(($speed * 2048 )) # Ночная скорость else fspeedkb=$(($speed * 1024 )) # Дневная скорость fi else fspeedkb=65536 fi echo $fspeedkb"bit" } # online_users - это папке где я храню файлы, которые именуются юзером # В OnConnect создаю файл с именем юзера, в OnDisconnect удаляю файл for user in `ls /var/stargazer/online_users` do # читаю тариф из юзерского конфига - через функцию fspeedkb() узнаю скорость tariff=$(grep -i "^tariff=" /var/stargazer/users/$user/conf | cut -f 2 -d"=") speedkb=`fspeedkb $tariff` #ЧИтаю метки в iptables установленные в OnConnect mark=$(cat /var/stargazer/users/$user/shaper_mark) mark1=$(cat /var/stargazer/users/$user/shaper_mark1) # Пишу какая скорость устанавливается echo "$speedkb" > /var/stargazer/users/$user/shaper_rate # Shaper ###################################################################################### #INET-Download /sbin/tc class change dev $int_iface_down parent 1:1 classid 1:$mark htb rate $speedkb #INET-Upload /sbin/tc class change dev $int_iface_up parent 1:1 classid 1:$mark1 htb rate $speedkb ###################################################################################### done OnConnect #!/bin/bash # Login LOGIN=$1 #user IP IP=$2 #cash CASH=$3 #user ID ID=$4 #Selected dirs to connect DIRS=$5 default_speed=64kbit int_iface_up=eth0 int_iface_down=eth1 ipaddrnet = внешний адресс # Удаляем Фильтра ###################################################################### iptables -t filter -D INPUT -s $IP -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D INPUT -s $IP -j ACCEPT done iptables -t filter -D FORWARD -s $IP -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D FORWARD -s $IP -j ACCEPT done iptables -t filter -D FORWARD -d $IP -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D FORWARD -d $IP -j ACCEPT done iptables -t filter -D OUTPUT -d $IP -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D OUTPUT -d $IP -j ACCEPT done ####################################################################### # Добавляем фильтр ####################################################################### iptables -t filter -A INPUT -s $IP -j ACCEPT iptables -t filter -A FORWARD -s $IP -j ACCEPT iptables -t filter -A FORWARD -d $IP -j ACCEPT iptables -t filter -A OUTPUT -d $IP -j ACCEPT ####################################################################### # NAT ####################################################################### # Удаляем НАТ iptables -t nat -D POSTROUTING -s $IP -o $int_iface_up -j SNAT --to $ipaddrnet while [ $? -eq 0 ] do iptables -t nat -D POSTROUTING -s $IP -o $int_iface_up -j SNAT --to $ipaddrnet done # Добавляем НАТ iptables -t nat -A POSTROUTING -s $IP -o $int_iface_up -j SNAT --to $ipaddrnet ####################################################################### # Добавляем метку, что юзер онлайн echo "$ip" > /var/stargazer/online_users/$LOGIN tariff=$(grep -i "^tariff=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=") function fspeedkb() { ftariff=$1 speed=$(echo "$ftariff" | sed "s/[^0-9]//g") if [ "$speed" != "" ] then if [ `date +"%H:%M"` \< "10:00" ] then fspeedkb=$(($speed * 2048 )) # Ночная скорость else fspeedkb=$(($speed * 1024 )) # Дневная скорость fi else fspeedkb=65536 fi echo $fspeedkb"bit" } # Через функцию fspeedkb() из тарифного плана узнаем скорость для шейпера # функция работает: извлекает числовое значение из тарифного плана, # это число идет килобитах, чтобы получить в битах - умножаем на 1024 speedkb=`fspeedkb $tariff` declare -i mark=$ID+10 declare -i mark1=$ID+2000 echo "$mark" > /var/stargazer/users/$LOGIN/shaper_mark echo "$mark1" > /var/stargazer/users/$LOGIN/shaper_mark1 echo "$speedkb" > /var/stargazer/users/$LOGIN/shaper_rate iptables -t mangle -A FORWARD -d $IP -j MARK --set-mark $mark iptables -t mangle -A FORWARD -s $IP -j MARK --set-mark $mark1 ########################################################################################## #Download /sbin/tc class add dev $int_iface_down parent 1:1 classid 1:$mark htb rate $speedkb /sbin/tc filter add dev $int_iface_down parent 1: protocol ip prio 3 handle $mark fw classid 1:$mark ################################## #Upload ################################## /sbin/tc class add dev $int_iface_up parent 1:1 classid 1:$mark1 htb rate $speedkb /sbin/tc filter add dev $int_iface_up parent 1: protocol ip prio 3 handle $mark1 fw classid 1:$mark1 ########################################################################################### OnDisconnect #!/bin/bash int_iface_up=eth0 int_iface_down=eth1 ipaddrnet = внешний адресс # Login LOGIN=$1 #user IP IP=$2 #cash CASH=$3 #user ID ID=$4 #Selected dirs to disconnect DIRS=$4 ############################################################################ iptables -t filter -D INPUT -s $IP -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D INPUT -s $IP -j ACCEPT done ################################## iptables -t filter -D FORWARD -s $IP -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D FORWARD -s $IP -j ACCEPT done ################################## iptables -t filter -D FORWARD -d $IP -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D FORWARD -d $IP -j ACCEPT done ################################## iptables -t filter -D OUTPUT -d $IP -j ACCEPT while [ $? -eq 0 ] do iptables -t filter -D OUTPUT -d $IP -j ACCEPT done ################################## iptables -t nat -D POSTROUTING -s $IP -o $int_iface_up -j SNAT --to $ipaddrnet while [ $? -eq 0 ] do iptables -t nat -D POSTROUTING -s $IP -o $int_iface_up -j SNAT --to $ipaddrnet done ############################################################################ tariff=$(grep -i "^tariff=" /var/stargazer/users/$LOGIN/conf | cut -f 2 -d"=") # Удаляем файл о том, что юзер онлайн rm /var/stargazer/online_users/$LOGIN function fspeedkb() { ftariff=$1 speed=$(echo "$ftariff" | sed "s/[^0-9]//g") if [ "$speed" != "" ] then if [ `date +"%H:%M"` \< "10:00" ] then fspeedkb=$(($speed * 2048 )) # Ночная скорость else fspeedkb=$(($speed * 1024 )) # Дневная скорость fi else fspeedkb=65536 fi echo $fspeedkb"bit" } # Через функцию fspeedkb() из тарифного плана узнаем скорость для шейпера # функция работает: извлекает числовое значение из тарифного плана, # это число идет килобитах, чтобы получить в битах - умножаем на 1024 speedkb=`fspeedkb $tariff` declare -i mark=$ID+10 declare -i mark1=$ID+2000 # INET ############################################################################ if [ -n "$mark" ] then iptables -t mangle -D FORWARD -d $IP -j MARK --set-mark $mark while [ $? = 0 ] do iptables -t mangle -D FORWARD -d $IP -j MARK --set-mark $mark done fi if [ -n "$mark1" ] then iptables -t mangle -D FORWARD -s $IP -j MARK --set-mark $mark1 while [ $? = 0 ] do iptables -t mangle -D FORWARD -s $IP -j MARK --set-mark $mark1 done fi ############################################################################ #Download ########################################################################################## # INET /sbin/tc filter del dev $int_iface_down parent 1: protocol ip prio 3 handle $mark fw classid 1:$mark /sbin/tc class del dev $int_iface_down parent 1:1 classid 1:$mark htb rate $speedkb #Upload ################################## # INET /sbin/tc filter del dev $int_iface_up parent 1: protocol ip prio 3 handle $mark1 fw classid 1:$mark1 /sbin/tc class del dev $int_iface_up parent 1:1 classid 1:$mark1 htb rate $speedkb ########################################################################################### Link to post Share on other sites
yKpon 8 Posted 2011-08-21 09:14:28 Share Posted 2011-08-21 09:14:28 у меня реализовано так: имя тарифа так сказать служебный параметр о котором юзер не знает, например анлимы это u1, u2, u3 ,u4 итд в таблице tariffs в конце добавлены поля Speed - это скорость на тарифе, RUname - это название тарифа в кирилице о котором юзер знает и это имя присутствует в прейскуранте теперь чтобы поменять скорость на тарифе просто меняем значение ячейки Link to post Share on other sites
DarkSpider 36 Posted 2011-08-21 12:05:08 Author Share Posted 2011-08-21 12:05:08 Сейчас в скриптах - ну примерно так же, как показано выше - просто изменена скорость на нужную. А стоит задача перевести ВСЕХ пользователей на более высокие тарифы. Менять думаю утром. Скриптом. Т.е. создать нужные тарифы и скриптом поменять тарифы. Прочто думал есть возможность поменять названия тарифов - было бы проще. Ну на нет - и суда нет. Собственно вот сам скрипт : #!/bin/bash folder=/var/stargazer/users messenger="/usr/sbin/sgconf set -s 192.168.x.x -p 9999 -a admin -w password" echo "#!/bin/bash" > ./cmd.log echo " " >> ./cmd.log LIST=`find $folder -type d 2>/dev/null| awk '{FS="/"} {print $5}'| sort|uniq | tr '\n' ' '` for ONE_OF_LIST in $LIST do if [ -e $folder/"$ONE_OF_LIST"/conf ] ; then { login=$ONE_OF_LIST iSPEED=`cat /var/stargazer/users/$login/conf | grep "Tariff=anlim" | cut -d "_" -f2` if [ "$iSPEED" != "" ] ; then case "$iSPEED" in 256) iSPEED2="anlim_256" ;; 512) iSPEED2="anlim_512" ;; 1024) iSPEED2="anlim_2048" ;; 2048) iSPEED2="anlim_6144" ;; 3072) iSPEED2="anlim_8192" ;; 4096) iSPEED2="anlim_10240" ;; 5120) iSPEED2="anlim_15360" ;; 10240) iSPEED2="anlim_20480" ;; *) echo "Ошибка получения скорости для логина $login" > ./error.log iSPEED2=$iSPEED ;; esac echo "$messenger"," -u $login -t $iSPEED2:now" >> ./cmd.log echo "sleep 3" >> ./cmd.log fi } fi done Потом просто cmd.log исполнить. Вот только думаю еще со слипами что делать. Оставить или попробовать без них. Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now