通过日志关键字检测判断obb程序是否工作正常

简介: C118+Osmocom-bb 多机 gsm sniff环境,经常发生工作一段时间后,某个手机监听的arfcn就不工作了。 检查日志发现,日志最后有连续的多条:TOA AVG is not 16 qbits, correcting (got 15),然后日志就一动不动了,无法再继续抓取sms,只能重启obb程序。

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工作不正常时,重新刷机(全自动刷机硬件改造方法参考置顶文章),起动监听程序。

参考代码如下:

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秒前一样时,也是不正常的,重新刷机监听。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
6月前
|
Serverless
函数计算在执行请求的过程中遇到了意外的错误
函数计算在执行请求的过程中遇到了意外的错误
65 1
|
10月前
|
SQL 数据库连接 数据库
学生信息管理系统之——实时错误91,对象变量或with块变量未设置
学生信息管理系统之——实时错误91,对象变量或with块变量未设置
|
10月前
|
缓存 小程序 API
小程序:浅谈小程序更新机制,发版后多久能全覆盖
小程序:浅谈小程序更新机制,发版后多久能全覆盖
262 0
feof用法重点详解(易被误用判断文件结束!!!)
feof用法重点详解(易被误用判断文件结束!!!)
|
安全 API Android开发
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
404 0
教你如何高效的检查APK中使用敏感权限的地方以及检查某系统方法被调用的地方
|
算法
建立统计过程中排除异常干扰机制
建立统计过程中排除异常干扰机制
122 0
建立统计过程中排除异常干扰机制
GoogleGuava - 第 1 章 基本工具——Throwables:简化异常和错误的传播与检查
GoogleGuava - 第 1 章 基本工具——Throwables:简化异常和错误的传播与检查
133 0
GoogleGuava - 第 1 章 基本工具——Throwables:简化异常和错误的传播与检查
【Lua篇】静态代码扫描分析(四)规则检查
通过前面三篇文章已经初步实现了将Lua源代码文件读取解析成语法树,现在就可以通过得到的语法树进行指定规则的代码扫描检查。下图简单列举了一下单个Lua文件内部的语法关系情况(注意并非真正的类图,也没有列举完全部的节点类型)。
431 0
【Lua篇】静态代码扫描分析(四)规则检查
|
自然语言处理
在以阶段划分的编译过程中,判断程序语句的形式是否正确属于()阶段的工作。
在以阶段划分的编译过程中,判断程序语句的形式是否正确属于()阶段的工作。
127 0
|
安全 网络协议
CVE-2020-8617:检查TSIG有效性的代码逻辑错误可能被用于触发tsig.c中的断言失败
2020年5月19日,ISC发布了BIND的一个新的漏洞和补丁。在受到攻击时,新版本的BIND服务器可以触发tsig.c中的断言失败,而检测到服务器不一致的状态并强制退出,进而保护服务器。