Chinaunix
标题:
FreeRadius 在用户掉线时,无法再次拨号
[打印本页]
作者:
deanetg
时间:
2009-07-05 22:32
标题:
FreeRadius 在用户掉线时,无法再次拨号
我设定 FreeRadius 用户同时只能登陆一次。Accouting 也没有问题,但是当用户发生突然掉线的情况下,可能由于FreeRadius 没有更新数据库而造成用户无法再次登录。
我看了一下数据库,FreeRadius是靠判断 radacct表中的acctstoptime字段来判断用户是否在线。如果用户拨入后再未登出之前该字段值为NULL。
不知道大家有什么好的办法来解决此问题?望高手指教。
我分析了一下,想利用 cron 来 运行 mysql 的update名来来把异常掉线的用户数据更新。计算方法为:
单位时间 = 为 NAS 设定更新用户登录信息的时间。在MPD中我设置的是2分钟。即 每两分钟运行一次cron。
判断异常用户:
条件一:acctstoptime 为 NULL;
条件二:用户登录时间 + acctsessiontime (会话时间) < 当前时间 - 单位时间。
符合上述两个条件的记录,即为异常掉线用户。则通过cron能够将登出时间设定为 当前时间 - 单位时间。
但是,由于SHELL很差,又不会 PERL,不知道该怎样写出CRON运行的MYSQL脚本,故请大家帮忙,实现一下这个脚本。
谢谢了。
MYSQL 语句为:
UPDATE radacct SET acctstoptime = FROM_UNIXTIME(UNIX_TIMESTAMP()- 120) WHERE
((UNIX_TIMESTAMP(acctstarttime) + acctsessiontime + 120 - UNIX_TIMESTAMP())<0)
AND acctstoptime = NULL
我该如何将上面这条语句通过/etc/crontab 里的定义没两分钟运行一次呢??
作者:
deanetg
时间:
2009-07-06 08:42
没人理我啊~~
作者:
就不改
时间:
2009-07-20 11:14
这个主要和NAS有关,NAS不能正确反应用户的状态。我用的PPPoED就没有问题,但要是服务器突然掉电、重启等问题,还是会有这个问题的,那只好删除radacct表中AcctStopTime为0的记录删掉,不过用户会讨些小便宜:wink:
作者:
sem001
时间:
2010-08-23 13:41
你用的是 freeradius什么版本? 用户信息是在mysql数据库中吗?
作者:
likexnun
时间:
2011-10-18 04:53
不要用那限制单用户查询语句,很难用,
直接给数据库,用户名密码那表里,添加个2字段,比如 online,lasttime (时间)
给ACCTING的时候,开始和更新,把这个字段设定为0,时间为当前时间,STOP离线的时候设online为1,,
给数据库写个时间,判断 lasttime 和当前时间 ,相差几分钟,超过这个时间直接设置为1,,
认证的语句后面加上 ,,online =1 .来判断用户是否在线
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2