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