Вот адаптировал данные скрипты под свои нужды (авторам скриптов огромное спасибо!), так как я не люблю по форуму лазить и собирать всё из кусков = собрал всё в одном месте .. может кому пригодиться .... тут в
архиве инструкция + всё что надо

, реализовал не с помощью java консоль админки, а с помощью ourfa .. вот
ссылка urfaclient на С.
Utm 5.2.1.008
freebsd 8.2
mysql 5.1.55

ну начнем ..
задача :
смотри первый пост этой темы

..
решение :
1)ourfa_client - аналог официального консольного клиента utm5_urfaclient. Выполняет те же функции и работает с теми же XML схемами.
берем от
сюда или из архива в папке ourfa
устанавливаем из партов
cd ourfa/freebsd/ourfa
make install
cd ourfa/freebsd/p5-ourfa
make install
на UTM 5.2.1-008 обязательно нужен сертификат admin.crt для работы ourfa_client
Его можно скачать
здесь или взять из архива, положить в /netup/utm5/admin.crt и ourfa_client запускать с ключем -S rsa_cert
это для сведенья !
в файле /netup/utm5/utm5_urfaclient.cfg раскомментировать или добавить строки, если их там нет
core_host=127.0.0.1
core_port=11758
core_login=init
core_password=init
2) копируем папку script в /netup/utm5/.. в ней 2 скрипта — off , on Лежит она в архиве. Или создать свои, коды ниже ..
3) /netup/utm5/script/off – этот скрипт, в последний день месяца проверяет у пользователей баланс и сравнивает его с абонентской платой на следующий месяц, если баланс больше абонентской платы скрип ни чего не делает, но если меньше скрипт ставит блокировку и заносит id пользователя в лог. Для работы скрипта нужно в нём указать, БД, имя пароль к БД, хост mysql
MYUSER="root" — имя к БД
MYPASS="pass" — пароль к БД
MYHOST="127.0.0.1" — хост
UTM5DB="UTM5" – БД
Код: Выделить всё
#!/bin/sh
MYUSER="root"
MYPASS="pass"
MYHOST="127.0.0.1"
UTM5DB="UTM5"
dat=`date +%Y%m%d,%H:%M:%S`
day=`date -j -v +1d +%d`
log="/netup/utm5/log/off.log"
RESULT=`echo "SELECT users.basic_account AS aid \
FROM users \
INNER JOIN accounts ON (users.basic_account = accounts.id) \
INNER JOIN account_tariff_link ON (accounts.id = account_tariff_link.account_id) \
INNER JOIN tariffs_services_link ON (account_tariff_link.next_tariff_id = tariffs_services_link.tariff_id) \
LEFT OUTER JOIN periodic_services_data ON (tariffs_services_link.service_id = periodic_services_data.id) \
WHERE users.is_deleted = 0 AND accounts.is_deleted = 0 AND \
account_tariff_link.is_deleted = 0 AND tariffs_services_link.is_deleted = 0 AND \
periodic_services_data.is_deleted = 0 AND periodic_services_data.discount_method = 1 AND \
periodic_services_data.cost > 0 AND accounts.balance < periodic_services_data.cost AND \
accounts.is_blocked = 0 AND \
accounts.credit = 0 ORDER BY aid" | \
mysql -h $MYHOST -u $MYUSER -p$MYPASS -D $UTM5DB`
if [ $day = "01" ]; then
for i in $RESULT;
do
echo "$dat Blockin accounts - $i " >> $log
ourfa_client -S rsa_cert -a rpcf_block_account -account_id $i -is_blocked 1792 -int_status 0
sleep 1
done
else
echo "$dat no last day!!!" >> $log
fi
4) /netup/utm5/script/on – этот скрипт, который запускается раз в 3 минут проверяет у пользователей баланс и сравнивает его с абонентской платой на следующий месяц, если баланс больше или равен абонентской плате скрип выключает блокировку и заносит id пользователя в лог(но только сделанную скриптом off блокировку), если меньше скрипт ни чего не делает. Для работы скрипта нужно в нём указать, БД, имя пароль к БД, хост mysql
MYUSER="root" — имя к БД
MYPASS="pass" — пароль к БД
MYHOST="127.0.0.1" — хост
UTM5DB="UTM5" – БД
Код: Выделить всё
#!/bin/sh
MYUSER="root"
MYPASS="pass"
MYHOST="127.0.0.1"
UTM5DB="UTM5"
dat=`date +%Y%m%d,%H:%M:%S`
log="/netup/utm5/log/on.log"
RES_AID=`echo "SELECT users.basic_account AS aid FROM users INNER JOIN accounts ON (users.basic_account = accounts.id) \
INNER JOIN account_tariff_link ON (accounts.id = account_tariff_link.account_id) \
INNER JOIN tariffs_services_link ON (account_tariff_link.next_tariff_id = tariffs_services_link.tariff_id) \
LEFT OUTER JOIN periodic_services_data ON (tariffs_services_link.service_id = periodic_services_data.id) \
WHERE users.is_deleted = 0 AND accounts.is_deleted = 0 AND \
account_tariff_link.is_deleted = 0 AND tariffs_services_link.is_deleted = 0 AND \
periodic_services_data.is_deleted = 0 AND periodic_services_data.discount_method = 1 AND \
periodic_services_data.cost > 0 AND accounts.balance >= periodic_services_data.cost AND \
accounts.is_blocked = 1792 ORDER BY aid" | \
mysql -h $MYHOST -u $MYUSER -p$MYPASS -D $UTM5DB`
for i in $RES_AID;
do
echo "$dat Unlockin accounts - $i " >> $log
ourfa_client -S rsa_cert -a edit_account -account_id $i -is_blocked 0 -int_status 1
sleep 1
done
5)создаем 2 пустых файла в директории /netup/utm5/log
touch on.log
touch off.log
сюда будут писаться логи выполненной работы скриптов
6)добавляем в /etc/crontab
дописываем в PATH строку :/usr/local/bin:/usr/local/sbin без этого не будут выполняться mysql запросы из скриптов.
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
#Billing !
*/3 * * * * root /netup/utm5/script/on >> /dev/null 2>&1
57 23 * * * root /netup/utm5/script/off >> /dev/null 2>&1
готово.
Скрипт включение, скрипт выключение занимает по времени ~1 секунду на одного пользователя. Так что пока база с пользователями не большая в моем случае ~100 пользователей пока, можно поставить запуск скрипта on каждые 3 минуты, а оff в 23-57... соответственно с ростом пользователей значения эти менять...
Скрипт off блокирует с пометкой "Да (пересчитывать абон.плату и трафик)" значение 1792, скрипт on разблокирует тока блокировку сделанную off и если вы сами поставили блок 1792. это сделано для того, чтоб можно было блокировать пользователей( к примеру из utm_admin поставить блок "Да (пересчитывать абонентский плату)"), а скрип автоматом их не разблокировал.
На идеальную версию не претендую, но все проверил = все работает!

если кто нашел недочёты, да и так может, где чё не очень правильно = жду комментариев..