进程端口存在,但程序挂掉
本帖最后由 大雄z 于 2018-4-19 14:08 编辑1、 脚本需求分析:
原因:程序有时会突然丢失,但进程存在,预警短信也不发送。
解决:日志文件每秒钟都会无时无刻的更新,此时在监控线上运行的程序日志文件,当日志文件30秒没有反应或者1分钟不增长,那就说明这个程序肯定有问题,那就需要运维人员干预查看了。
2、 计划任务:
# 每5分钟执行一次py脚本*/5 * * * * /usr/bin/python/opt/xx/service_check.py> /dev/null2>&1 &
3、 Py脚本
#!/usr/bin/env python# -*- coding:utf-8 -*-
import os
import time
import sys
# 获取当前路径,以及需要获取文件的日志文件路径.
List_dir = os.listdir(os.path.dirname(os.path.abspath(__file__)))
Log_dir = "release/linux/logs/wrapper.log"
"""
更新某些不在上数或上数慢的服务
"""
def Upnotlstb():
NLSTB = ("logpath")
for i in NLSTB:
with open(i, 'a') as NSLTBD:
NSLTBD.write("python scripts project check, then not alone version insert update messages, \
avoid send mail messages" + "\n")
"""
获取文件路径的函数
dirpath: 用于定义文件日志路径的相对路径
:return: 返回文件元组,当前所有服务的日志相对路径
"""
def Dirfile():
dirpath=[]
for i in List_dir:
if os.path.isdir(i):
files=os.path.join(i,Log_dir)
dirpath.append(files)
return dirpath
"""
获取文件大小
dirsize: 定义一个键值对,用于更新文件的大小及路径
Fsize: 查询到的每个文件大小
:return 返回获取到的键值对
"""
def Filesize(dirname):
dirsize = {}
while True:
for file in dirname:
try:
Fsize=os.path.getsize(file)
dirsize=Fsize
except Exception as E:
pass
return dirsize
"""
收集两次文件的大小用于判断
file_old_size:
"""
def Size_Judge(oldsize,newsize,dirname):e
for dirfilename in dirname:
# 循环获取每个文件的大小.
file_old_size=oldsize
file_new_size=newsize
# 增长表示没问题,否则就是有问题
if file_old_size != file_new_size:
pass
else:
# 将获取的值写入文件中, 然后执行邮件脚本
with open('test.txt','w') as file:
file.write(dirfilename)
file.write(",then logfile not increase" + "\n")
os.system("/bin/bash /tmp/mail.sh")
"""
执行上面定义的函数
dirname 用于获取文件的路径相对地址,绝对地址需要手动定义
old_dirsize 10秒钟前的文件大小,可以写成死循环
new_dirsize 10秒钟后的文件大小
Size_Judge 判断函数
"""
if __name__ == '__main__':
# 获取文件路径
dirname = Dirfile()
# 先获取一个值,用于测试文件是否停止工作状态,10秒内大小一致说明文件已经挂了
old_dirsize=Filesize(dirname)
# 刷新缓冲区 10秒
for sl in range(2):
sys.stdout.flush()
time.sleep(1)
# 10秒钟之后在更新这些文件,不然获取的还是老的文件的大小
# Upnotlstb()
new_drssize=Filesize(dirname)
ps: 还可以在写一个python的smtp程序,小弟还不会,首先先用linux sendEmail代替。
4、 邮件shell脚本
#!/bin/bash
#
# Name:定义邮件发送脚本
# Version Number:1.1
# Language:bash shell
# Date:2017-05-12
# Author:xiong
# 此处定义用户邮箱名称如: name@xx.com
username=123@qq.com
# 此处定义用户邮箱密码
userpass=这里写密码
# 此处定义要发送哪个用户如 a.com发给b.com 这就定义b.com
senduser="这里定义发件人 比如a.qq.com b.qq.com c.qq.cm"
# 此处定义smtp地址如smtp.qiye.163.com:25必须加端口号
smtpaddess=smtp.qiye.163.com:25
# 此处定义邮件主题
subject="这里是标题"
# 此处定义邮件信息
message=’这里是内容’也可以打开文件比如 `cat /tmp/1.txt`
# 发送邮件到各个邮箱中去,附带一个附件显示每日pv
/usr/local/bin/sendEmail -f $username -t $senduser -s $smtpaddess -u $subject -o tls=auto -o message-content-type=html -o message-charset=utf8-xu $username -xp$userpass -m $message -a 这里可以带一个附件 >/dev/null
不懂,学习了 好NB的感觉~ 好NB的感觉~
思路可以,通过文件大小判断 顶一下 学习了 {:1_921:}
页:
[1]