吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3782|回复: 5
收起左侧

[Python 转载] 进程端口存在,但程序挂掉

[复制链接]
大雄z 发表于 2018-4-19 14:05
本帖最后由 大雄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[file]=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[dirfilename]
        file_new_size=newsize[dirfilename]
        # 增长表示没问题,否则就是有问题
        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脚本
[Bash shell] 纯文本查看 复制代码
#!/bin/bash
#
# Name:定义邮件发送脚本
# Version Number:1.1
# Language:bash shell  
# Date:2017-05-12
# Author:xiong

# 此处定义用户邮箱名称如: [email]name@xx.com[/email]
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


发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

gteng1314 发表于 2018-4-19 14:20
不懂,学习了
wefbnkop 发表于 2018-4-19 14:56
a44270110 发表于 2018-4-19 15:24
小黑LLB 发表于 2019-2-1 17:30
思路可以,通过文件大小判断 顶一下 学习了
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 01:25

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表