Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1699076
  • 博文数量: 358
  • 博客积分: 2180
  • 博客等级: 大尉
  • 技术积分: 1810
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-17 13:47
文章分类

全部博文(358)

文章存档

2016年(17)

2015年(55)

2014年(9)

2013年(67)

2012年(181)

2011年(29)

分类: 服务器与存储

2016-03-18 17:10:33

ats程序崩溃会在主目录下出现core.xxx的文件(xxx是数字),由于我不是每测试一条请求就去看看是否崩溃了,所以有时候已经崩溃了但是我没有及时发现,导致记不清楚崩溃可能的复现步骤,所以我想写个自动化脚本,通过计划任务查询此目录下是否有core.xxx文件出现,只要一出现就弹出来一个框提示我崩溃了。下面是我的具体实现:

一、弹出提示框的想法:
find.sh脚本:
#!/bin/bash
if ls /usr/local/squid/core* >/dev/null 2>&1;then
whiptail --title "jiankong" --msgbox "bengkuile!" 10 15
fi
加入计划任务:
crontab -e 
*/1 * * * * /home/shell/bin/find.sh
执行find.sh,如果在 /usr/local/squid/下存在core.xxx文件则崩溃提示界面会出现,按任意键回到执行界面,但是当把此脚本加入到计划任务时,当崩溃文件出现时此界面不能弹出。-------暂时还是不知道解决方法,我用原来我写的执行python画图程序弹出图的脚本放在计划任务中也不能弹出画的图


二、向终端发提示信息的想法:
加入计划任务:
crontab -e 
*/1 * * * * /home/shell/bin/find.sh

find.sh脚本:
#!/bin/bash
if ls /usr/local/squid/core* >/dev/null 2>&1;then
wall "appear core file!"  -----向所有终端发送崩溃提示信息
fi
则所有登录此机器的终端界面都会出现下面的信息
Message from root@localhost on at 17:25 ...
appear core file!
EOF

=====如果想控制在某台机器终端上显示此提示信息,可以这样写:
find.sh脚本:
#!/bin/bash
if ls /usr/local/squid/core* >/dev/null 2>&1;then
echo "appear core file!"|write test1 pts/3-----向指定终端发送崩溃提示信息
fi

=====如果写成echo "appear core file!"|write root,执行find.sh,则提示如下,感觉是从最近打开的那个终端显示提示信息
write: root is logged in more than once; writing to pts/4


====附上:从下面可知道登录用户test1 pts/3
[root@localhost bin]# w
 17:32:56 up 3 days,  1:40,  4 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    192.168.10.168   16:44    0.00s  0.05s  0.00s w
root     pts/2    192.168.10.168   17:22   30.00s  0.03s  0.03s -bash
test1    pts/3    192.168.10.168   17:20    4:20   0.04s  0.04s -bash
root     pts/4    192.168.10.168   17:24    8:26   0.03s  0.03s -bash

此想法的弊端:第二中方法如果用户在进行别的操作可能就没看到这个提示信息,提示信息可以加颜色?待研究

三、发邮件,崩溃了就给我发邮件
/home/shell/bin/mail.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import smtplib
#标题
subject = 'sub'
mailto = 'xxx@163.com'
#内容
body = 'faint'
owner ='xxx@163.com'
passwd ='xxxxxx'
svr = smtplib.SMTP('mail.163.com',25)
svr.login(owner,passwd)
msg = "From: %s\nTo: %s\nSubject: %s\n\n%s\n" % (owner,mailto,subject,body)
svr.sendmail(owner,mailto,msg)
svr.quit()

 /home/shell/bin/find.sh
#!/bin/bash
if ls /usr/local/squid/core* >/dev/null 2>&1;then
python /home/shell/bin/mail.py
fi
弊端:当崩溃文件出现时就会收到提示的邮件,邮件可能有一些延迟,且不知道是发送哪个请求时崩溃的

四、作为测试中的一个检查项写入测试脚本中
python崩溃检查函数如下:
def check_crash_core(proxyIp,sshPort,user,passwd):
cmd='ls /usr/local/squid/core*'
temp=ssh_cmd(proxyIp,sshPort,user,passwd,cmd)
l=len(temp)
if l<>0:
print "program is crashed"
filewriteappend("/home/shell/log/requestResult.log"," program is crashed\n")
else:
print "program is not crashed"
filewriteappend("/home/shell/log/requestResult.log"," program is not crashed\n")

这样我发一次测试请求就会执行此函数一次,在requestResult.log文件中看到是否有崩溃出现且知道是发送哪条请求(执行哪条测试用例)出现的崩溃,便于排查问题
以便重现崩溃
阅读(1924) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~