通过日志关键字检测判断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 ...
随机推荐
- python3 设置滚动条
#!python3#coding=utf-8from selenium import webdriverfrom selenium.webdriver.common.by import Byimpor ...
- 19. Remove Nth Node From End of List C++删除链表的倒数第N个节点
https://leetcode.com/problems/remove-nth-node-from-end-of-list/ 使用双指针法,可以仅遍历一次完成节点的定位 /** * Definiti ...
- C# 3.0 / C# 3.5 扩展方法
概述 扩展方法是一种特殊的静态方法,可以像扩展类型上的实例方法一样进行调用,能向现有类型“添加”方法,而无须创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法的定义实现: public s ...
- Hadoop 2.7.3 完全分布式维护-简单测试篇
1. 测试MapReduce Job 1.1 上传文件到hdfs文件系统 $ jps Jps SecondaryNameNode JobHistoryServer NameNode ResourceM ...
- python中json的使用
在编写接口传递数据时,往往需要使用JSON对数据进行封装.python和json数据类型的转换,看作为编码与解码. 编码:json.dumps() Python JSON dict object li ...
- 一、持久层框架(Hibernate)
一.Hibernate 使用JDBC做数据库相关功能开发会做很多重复性的工作,创建连接,关闭连接,把字段逐一映射到属性中等.Hibernate把这些进行封装起来,使得数据库访问变得轻松简单. 1.创建 ...
- Oracle RAC时间同步(NTP/CTSS)
1.RAC 相关时间同步(time synchronization)Oracle Grid可用两种方式进行时间同步1)基于OS的NTP2)基于clusterware的CTSS(Cluster Time ...
- 【框架】selenium运行失败后自动截图(三)
思路: 1.写一个类继承TestListenerAdapter,覆写onTestFailure()方法 2.在onTestFailure方法里,调用selenium的TakesScreenShot的g ...
- MAVEN ECLIPSE JAR工程
在eclipse 空白处点击鼠标右键选择新建 project 选择maven project: 选择Create a simple project Group ID: Artifact ID:创建项目 ...
- object遍历删除空值
export function deleteObjEmpty(search = {}) { for (let i in search) { search[i] == undef ...