使用Python检测其他程序是否卡主了
admin
2023-07-12 01:42:51
0次

一、需求场景:

大量的windows上运行着某任务的Java程序,程序会出现莫名卡主。卡主时候系统资源利用率都正常,程序也只是卡主不会有任何错误提示,往往业务出现了问题再回头去查时候才会发现,不然就要派人定期巡检。

二、想法:

观察到程序卡主以后日志也停止输出,可以定期对比日志和系统时间,超过规定的阀值视为异常,即刻重启该程序(哎~有各种问题却无人维护的程序还真不少,只能贴狗皮膏药吧)

三、实践:

# -*- coding: utf-8 -*-
import os
import time
import datetime
import subprocess
from dateutil.parser import parse


def error1(fun):
    def error2(doc):
        try:
            fun(doc)
        except Exception as reason:
            print(reason)
    return error2


def read_log(log_file):
    tag = -1
    flag = True
    with open(log_file, 'rb') as f:
        lines = f.readlines()
        while flag:
            try:
                last_line = str(lines[tag], encoding='gb2312')
                print('获取到第%s行的数据为:\n%s' % (tag, last_line))
                log_time = last_line.split(",")[0]
                print('提取行数据中的时间为:%s' % (log_time))
                time_format = time.strptime(log_time, "%Y-%m-%d %H:%M:%S")
                print('时间格式正确!')
                flag = False
            except Exception as reason:
                print(reason)
                tag -= 1
        return log_time


def contrast_time(log_time):
    system_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    print('获取系统时间:%s' % (system_time))
    a = parse(log_time)
    b = parse(system_time)
    interval = (b - a).total_seconds()
    print("时间间隔为:%s秒" % (interval))
    return interval


def restart_script(interval, timeout, proc_name, cmd_file):
    current_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    f = open('log.txt', 'a+')
    print('%s 执行重启' % (current_time), file=f)
    f.close()
    os.system('taskkill /IM %s /F' % (proc_name))
    os.system('taskkill /IM cmd.exe /F')
    time.sleep(1)
    subprocess.Popen("%s" % (cmd_file))


@error1
def main(intervals):
    print('检查的文件为:%s' % (log_file))
    log_time = read_log(log_file)
    interval = contrast_time(log_time)
    if interval > timeout:
        print("检测到超时,将重启脚本....")
        restart_script(interval, timeout, proc_name, cmd_file)
    else:
        print("检测到时间间隔在规定范围内")
    print('==============================================')
    time.sleep(intervals)


if __name__ == '__main__':
    intervals = 300
    timeout = 300
    proc_name = 'java.exe'
    log_file = 'C:\\mailboxcode\\log\\log_'
    cmd_file = 'C:\\check_log\\start_run.bat'
    while True:
        main(intervals)

    

四、运行演示:

如果最后一行数据不包含时间,将会继续往上找一行。

使用Python检测其他程序是否卡主了

使用Python检测其他程序是否卡主了

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...