通过日志关键字检测判断obb程序是否工作正常
2017-06-13 02:28
274 查看
C118+Osmocom-bb 多机 gsm sniff环境,经常发生工作一段时间后,某个手机监听的arfcn就不工作了。
检查日志发现,日志最后有连续的多条:TOA AVG is not 16 qbits, correcting (got 15),然后日志就一动不动了,无法再继续抓取sms,只能重启obb程序。
不清楚这是obb的程序bug,还是基站每天不定时调整( 某些arfcn,并不是一天24小时都工作的,有时会断那么一小会儿 )导致的。
重启obb程序的过程不算复杂,无非是先刷机(我没试过硬刷),再监听。
可以在smsweb里专门写一个方法,结合Python+shell命令定期(30秒)去检测日志(使用tail和diff命令),当判断obb工作不正常时,重新刷机(全自动刷机硬件改造方法参考置顶文章),起动监听程序。
参考代码如下:
diff.sh:
说明:
1. 当日志里连续三行的日志都出现AVG关键字时,就认为obb工作不正常了,果断重新刷机监听。
2.当日志过了30秒后内容还和30秒前一样时,也是不正常的,重新刷机监听。
检查日志发现,日志最后有连续的多条:TOA AVG is not 16 qbits, correcting (got 15),然后日志就一动不动了,无法再继续抓取sms,只能重启obb程序。
不清楚这是obb的程序bug,还是基站每天不定时调整( 某些arfcn,并不是一天24小时都工作的,有时会断那么一小会儿 )导致的。
重启obb程序的过程不算复杂,无非是先刷机(我没试过硬刷),再监听。
可以在smsweb里专门写一个方法,结合Python+shell命令定期(30秒)去检测日志(使用tail和diff命令),当判断obb工作不正常时,重新刷机(全自动刷机硬件改造方法参考置顶文章),起动监听程序。
参考代码如下:
def monitor_log(): mysql = Database() while True: print("monitor log:") getusb = subprocess.Popen(["./osmocom-bb/getusb.sh"],stderr=subprocess.PIPE,stdout=subprocess.PIPE) usbResult = getusb.communicate() getusb.wait() device = re.findall(r'\d',usbResult[0])[0] #find arfcn str_sql = "SELECT * FROM sniff limit 0," + str(device) data = mysql.query(str_sql) for row in data: arf = str(row['arfcn']) power = str(row['power']) sptype = str(row['sptype']) tty = str(row['tty']) counter = 0 command = 'tail -n3 ./download_'+ tty +'.log' textlist = os.popen(command).readlines() for line in textlist: if "AVG" in line: print("find got 15 in log! dangerous!") counter = counter + 1 #logger.info("AVG counter:" + str(counter) + " " + str(tty) + " arfcn:" + str(arf) ) if int(counter) == 3: print("found 3 got 15! restart osmocon and sniff!") #cur_time = time.strftime('%Y/%m/%d %H:%M:%S',time.localtime(time.time())) logger.info("got 15 mon:" + str(tty) + " arfcn:" + str(arf) ) ps1=Process(target=download1,args=(str(tty),)) ps1.start() ps1.join(10) #time.sleep(10) ps2=Process(target=sniff,args=(str(tty),str(arf),)) ps2.start() ps2.join(30) #time.sleep(30) #subprocess.Popen("./osmocom-bb/test.sh",shell = True) # 检测文件是否有变动 cur_log = "download_" + tty + ".log" old_log = cur_log + ".old" getdiff = subprocess.Popen(["./diff.sh",cur_log,old_log],stderr=subprocess.PIPE,stdout=subprocess.PIPE) diffResult = getdiff.communicate() getdiff.wait() diff_ret = re.findall(r'\d',diffResult[0])[0] #logger.info("logchange mon:" + str(tty) + " arfcn:" + str(arf) + " diff_ret:" + str(diff_ret)) if int(diff_ret) == 0: # print("log not change in 30secs! restart osmocon and sniff!") # #cur_time = time.strftime('%Y/%m/%d %H:%M:%S',time.localtime(time.time())) logger.info("log diff:" + str(tty) + " arfcn:" + str(arf) ) ps1=Process(target=download1,args=(str(tty),)) ps1.start() ps1.join(10) #time.sleep(10) ps2=Process(target=sniff,args=(str(tty),str(arf),)) ps2.start() ps2.join(30) #time.sleep(30) #subprocess.Popen("./osmocom-bb/test.sh",shell = True) time.sleep(30)
diff.sh:
#!/bin/bash #diff ./download_0.log ./download_0.log.old diff $1 $2 >> diff_$1 #echo $? if [ $? = 0 ];then #echo "没区别" echo "0" else #echo "文件有变动" rm -fr $2 cp $1 $2 #echo "文件同步成功" echo "1" fi
说明:
1. 当日志里连续三行的日志都出现AVG关键字时,就认为obb工作不正常了,果断重新刷机监听。
2.当日志过了30秒后内容还和30秒前一样时,也是不正常的,重新刷机监听。
相关文章推荐
- C118 smsweb: 通过日志关键字检测判断obb程序是否工作正常_20160617_七侠镇莫尛貝
- C118 smsweb: 通过日志关键字检测判断obb程序是否工作正常_20160617_七侠镇莫尛貝
- 通过脚本判断一个程序是否在运行
- 通过输入一串字符,首先判断这些字符是否全都是数字,不是的话程序结束;如果全是数字则转换为中文的大写表示
- 浏览器判断检测手机中是否安装了ios/android客户端程序
- Linux下检测程序进程是否正常并重启的脚本
- 一行代码检测杀毒软件是否正常工作
- 通过对URL判断,检测引用的文件是否存在
- .net中判断该应用程序是否已经启动,防止重复启动,监控程序启动是否正常
- C#:判断当前程序是否通过管理员运行
- shell脚本判断某个linux程序是否在正常运行,如果不是就启动他
- android 判断是否真正连接到internet(通过检测网址,需要时间)
- 工作问题积累(三)程序中判断本地网络是否中断 C++
- java通过ping 判断网络是否正常
- 通过UID判断某个程序是否在前台运行(转)
- 实际工作中怎么判断一个程序或模块是否能够工作
- 通过51degrees.mobi 2.1.15.1 检测UserAgent判断是否为手机,并获取手机硬件型号
- 【转】通过文件锁实现,程序开始运行时,先判断文件是否存在,若存在则表明该程序已经在运行了,如果不存在就用open函数创建该文件,程序退出时关闭文件并删除文件
- 通过windows任务计划来备份数据库以及检测apache是否正常运行-sever 2008 Apache优化配置
- C#:判断当前程序是否通过管理员运行