通过日志关键字检测判断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 ...
随机推荐
- vscode插件之C/C++
目录 1.给C/C++调试器配置launch.json 2.配置VS Code的调试行为 3.配置目标应用 4.自定义GDB或者LLDB 5.调试dump(转储)文件 6.远程调试或者本地服务器上调试 ...
- 两个约束下的dp问题
洛谷P1510 分析:本质上还是一个01背包,将体力当做重量,体积当做价值.配上滚动数组 即dp[j]代表在体力耗费为j时最大能搬运多少体积的石头,当dp[j]>v时就说明存在满足情况的解,这样 ...
- 基于spring的web项目启动时预加载数据到ServletContext
1.要在web启动时预加载数据到ServletContext,实现方法有很多,一种比较简单的方案就是: 1)新建一个bean,定义其初始化方法: <bean id="beanId&qu ...
- 用javascript切换bootstrap的tab
html: <button class="tabContainer" data-toggle="tab" href="#note" i ...
- SQL SERVER版本补丁体系及升级
首先了解几个定义: RTM : 表示 Release to Manufacturing ,这是产品的原始发布版本,当从光盘或 MSDN 下载的默认版本.不过现在下载 SQL Server 版本时,也有 ...
- 【转】js 对象按照键值(不分区大小写)排序,生成签名方法
客户需求小程序端用js生成签名,我们按照要求一步一步解决,并且将请求方法封装到一个utils.js里: 第一步:对关联数组按照键名做正序排序. 第二步:拼接字符串 第三步:将拼接的字符串加上私钥 第四 ...
- python两个字典合并,两个list合并
1.两个字典:a={'a':1,'b':2,'c':3} b= {'aa':11,'bb':22,'cc':33} 合并1:dict(a,**b) 操作如下: 合并2:dict(a.items()+ ...
- 学习笔记-AngularJs(五)
之前的页面太丑了,后来我引入了bootstrap.css,把样式进行修了一番,如下图(一不小心,插入个链接,忽略,http://t.cn/RUbL4rP): (链接:http://www.live08 ...
- 【用例管理】用testng的groups管理用例
一.需求: 测试时经常有两种场景,第一种是冒烟测试的小部分用例:一类是全部用例. 二.针对第一种运行部分的用例,可以用groups来管理 package com.testcases; import o ...
- LY.JAVA面向对象编程.内存图
2018-07-06 一个对象的内存图 两个对象的内存图 三个对象的内存图 this static super 向上转型 向下转型