通过日志关键字检测判断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[])[] #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 = 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 + #logger.info("AVG counter:" + str(counter) + " " + str(tty) + " arfcn:" + str(arf) ) if int(counter) == :
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()
#time.sleep() ps2=Process(target=sniff,args=(str(tty),str(arf),))
ps2.start()
ps2.join()
#time.sleep()
#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[])[]
#logger.info("logchange mon:" + str(tty) + " arfcn:" + str(arf) + " diff_ret:" + str(diff_ret))
if int(diff_ret) == :
# 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()
#time.sleep() ps2=Process(target=sniff,args=(str(tty),str(arf),))
ps2.start()
ps2.join()
#time.sleep()
#subprocess.Popen("./osmocom-bb/test.sh",shell = True) time.sleep()
diff.sh:
#!/bin/bash #diff ./download_0.log ./download_0.log.old
diff $ $ >> diff_$
#echo $?
if [ $? = ];then
#echo "没区别"
echo ""
else
#echo "文件有变动"
rm -fr $
cp $ $
#echo "文件同步成功"
echo ""
fi
说明:
1. 当日志里连续三行的日志都出现AVG关键字时,就认为obb工作不正常了,果断重新刷机监听。
2.当日志过了30秒后内容还和30秒前一样时,也是不正常的,重新刷机监听。
通过日志关键字检测判断obb程序是否工作正常的更多相关文章
- Shell脚本日志关键字监控+告警
最近小张的爬虫程序越来越多,可当爬虫程序报错,不能及时的发现,从而造成某些重要信息不能及时获取的问题,更有甚者,遭到领导的批评.于是就在想有没有一种方法,当爬取信息报错的时候,可以通过邮件或者短信的方 ...
- Shell脚本实战:日志关键字监控+自动告警
一个执着于技术的公众号 该程序使用场景说明:主要用于Linux服务器监控程序日志,如出现关键字异常则触发相应的动作或告警操作,通知到邮件联系人. 一.安装邮件服务 1.解压 tar -jxf mail ...
- 基于深度学习的恶意样本行为检测(含源码) ----采用CNN深度学习算法对Cuckoo沙箱的动态行为日志进行检测和分类
from:http://www.freebuf.com/articles/system/182566.html 0×01 前言 目前的恶意样本检测方法可以分为两大类:静态检测和动态检测.静态检测是指并 ...
- 用代码如何检测一个android程序是否在运行
/** * 检测一个android程序是否在运行 * @param context * @param PackageName * @return */ public static boolean is ...
- ubuntu 18.04 检测到系统程序出现问题
检测到系统程序出现问题,想立即报告这个问题吗? 可以暂时先把这个提示关闭掉 $ sudo vi /etc/default/apport 找到第4行 修改为 enabled=0 保存退出 附linux中 ...
- 第二周:If判断语句程序当中的作用简介
1.If语句的作用: 在我们编写程序时经常会遇到内容判断的问题,比如判断内容的真假或者值的大小分别输出内容的问题 这时就会用到我们的If判断语句了,顾名思义,if在英文单词中意思为如果,在Java中他 ...
- Spark Streaming揭秘 Day18 空RDD判断及程序中止机制
Spark Streaming揭秘 Day18 空RDD判断及程序中止机制 空RDD的处理 从API我们可以知道在SparkStreaming中,对于RDD的操作一般都是在foreachRDD和Tra ...
- 如何用js检测判断时间日期的间距
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- C#:判断当前程序是否通过管理员运行
原文:C#:判断当前程序是否通过管理员运行 public bool IsAdministrator() { WindowsIdentity current = WindowsIdentity.GetC ...
随机推荐
- 基于VMware模拟实现远程主机网络通信
基于VMware模拟实现远程主机网络通信 目的: 基于VMware软件,模拟实现不同网段的两主机,通过路由器进行通信.两主机host A和host B分别处于VMnet6网络和VMnet7网络,都属于 ...
- python基础之 序列 pickle&json
内容梗概: 1. 什么是序列化 2. pickle(重点) 3. shelve 4. json(重点) 5. configparser模块 1. 什么是序列化 在我们存储数据或者网络传输数据的时候. ...
- 第一阶段——站立会议总结DAY03
昨天忘记发了,补充... 1.昨天做了什么:继续做界面的设计,使其更加美观. 2.今天准备做什么:准备将点击按钮时跳转到一个修改密码界面. 3.遇到的困难:此次第一阶段的任务是一个框架,不知道可否实现 ...
- 【Java】【2】String和List相互转换
正文: 1,String转List //常见的为逗号分隔 String str = "a,b,c"; List<String> list1 = Arrays.asLis ...
- python 小练习2
给你一个整数列表L,判断L中是否存在相同的数字, 若存在,输出YES,否则输出NO.解1l=[]for i in L: if L.count(i) != 1: print('YES ...
- python 解析与生成xml
xml.etree.ElementTree模块为xml文件的提取和建立提供了简单有效的API.下文中使用ET来代表xml.etree.ElementTree模块. XML是一种内在的分层的数据形式,展 ...
- Python print打印
1.Python运算符: +:加 -:减 *:乘 /:除以 %:去除法后的余数 //:取整除 2.字符串center方法: a='111'print(a.center(4,'2')) #让字符串占位 ...
- Qt中QSlider的样式表设置
转自: https://blog.csdn.net/tax10240809163com/article/details/50899023 //首先是设置主体QSlider{border-color: ...
- 消费Restful的web服务(三)
构架工程 创建一个springboot工程,去消费RESTFUL的服务.这个服务是 http:///gturnquist-quoters.cfapps.io/api/random ,它会随机返回Jso ...
- jQuery html5Validate基于HTML5表单 异步服务器端验证
1. HTML5 自带的Validate 很漂亮,很好用, 但是一定要在form里用submit按钮,才生效 <form id="frmInfo" action=" ...