【Python自动化运维】WIndows平台下监测服务端口,Port Down掉后马上重启启动相关服务

       这篇博文比较简单,主要是运用了python的telnetlib模块监测本地指定端口的运行。如果检测到端口不可访问说明服务失效了。

只需要关闭假死的相关进程,重启服务即可。

       本博文是基于某企业管理软件,其核心网站平台是基于tomcat6编写,由于其程序没有做到绝对优化,很多时候会出现假死的情况,加大内存和并发也是无济于事,那么只有做最坏的打算,Down掉后再马上重启服务,相关业余还是受到影响。

       下面是pyhon实战代码:

# -- coding: UTF-8 --
import os
import re
import subprocess
import telnetlib
import time
import datetime


def port_validate(duankou):
    nowtime = datetime.datetime.now()
    # 转换为其他字符串格式:
    strTime = nowtime.strftime("%Y-%m-%d %H:%M:%S")
    setvalue = "我的验证时间 = '" + str(strTime) + "',"
    st = time.time()
    try:
        telnetlib.Telnet("127.0.0.1", port=duankou, timeout=5)

    except:
        return False
    else:
        et = time.time()
        costtime = "{:.2f}".format(float(et - st))
        return True


def run_bats_restart():
    cmd1 = 'taskkill /f /im  tomcat6.exe'
    cmd2 = 'net stop  MSSQLSERVER /y'
    cmd3 = 'net stop  AAS'

    cmd4 = 'net start  MSSQLSERVER /y'
    cmd5 = 'net start AAS'
    run_cmd(cmd1)
    run_cmd(cmd2)
    run_cmd(cmd3)

    time.sleep(5)
    run_cmd(cmd4)
    time.sleep(5)
    run_cmd(cmd5)
    return "OK"


def run_cmd(cmd):
    popen = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    lines = popen.stdout.readlines()
    if len(lines)!=0:
        return ([line.decode('gbk') for line in lines])
    else:
        pass


if __name__ == '__main__':
    port = "8891"
    while True:
        today = datetime.date.today()
        weekday = today.isoweekday()
        nowtime = time.strftime('%H%M', time.localtime(time.time()))
        Day = float(time.strftime('%d', time.localtime(time.time())))
        fnowtime = float(nowtime)
        noticetimes = 1
        if fnowtime >= 800 and fnowtime <= 2200 and Day >= 3 and Day <= 31:

            # 每月1-2号为扎帐期,系统卡顿也不自动处理。手工根据情况进行调整。
            status = port_validate(port)
            if status == True:
                print(str(nowtime) + ",8891正常,继续检测中")
            else:
                result = run_bats_restart()
                print(str(nowtime) + ",8891关闭,已尝试重启服务" + str(result))
        else:
            pass
        time.sleep(20)
        continue

        # 打包
        # pyinstaller.exe -F C:\Users\Administrator\PycharmProjects\untitled3\AThack-mail\Check_port_restart.py

写的很乱,凑活着看吧。能用就行。。

       

    上面是打包后在服务器运行的界面,故障测试过 可以进行重启服务。

    有些网友在想为啥不用 cmd或者Power Shell来做,其实我也考虑过,cmd做起来有点麻烦,PS也是可以得,只是我没有精力去学校其语法,用PYthon凑活着干吧,至少别让我周末出去玩的时候,打电话来说XXX系统又坏了。。蛋疼。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值