python脚本+任务计划-监测守护合同系统

1 背景

公司的合同系统在部署在阿里云的windows 2008操作系统上,一次性购买,没有升级和维保,使用了几年后,经常会出现系统无法使用的情况,故障现象为网站无法打开,使用人员会联系维护人员,维护人员登录系统后重启一下服务,恢复使用。系统的初衷是为人服务,这样一来,成了系统为使用人员服务,维护人员为系统服务。并且原维护人员,出于安全考虑,将合同系统服务器登录绑定到了企业IP地址。非工作时间维护给维护人员平添了很多麻烦。在一个偶然的机会下就接手了这个工作。两周的处理下来,觉得这个流程有改进的空间,于是工作之余开始着手改进。

2 原流程

在这里插入图片描述
说明:

  1. 业务人员访问合同系统
  2. 正常使用合同系统流程结束
  3. 异常使用告知维护人员
  4. 维护人员使用内网VPN登录云服务器
  5. 重启合同系统的服务
  6. 重启完毕验证,如果异常则再次重启,正常访问
  7. 反馈告知业务人员
  8. 业务人员确认正常使用系统流程结束

业务人员认为系统可用性太差,并且维护人员不给力
维护人员认为系统稳定性太差,出力不讨好,虽然对业务人员可以把问题甩锅给系统,但是毕竟是维护口在维护处理。

3 针对问题的想法

认清问题后,就要着手去处理问题。这个问题看起来不大,但是能按上面的处理方法处理了几年,原因无外乎就三种:

  • 觉得这是个日常型问题,就该这么做
  • 想处理但是不知道如何下手
  • 给自己找点活干,工作汇报中有事可写。

要想处理问题就需要去分析一下这个问题,当业务人员反馈过来的时候,第一时间先自己登录一下系统,通过chrome的开发者模式查看,出现timeout和无法访问的情况。
问题定位了,处理就方便了,这个其实不算太大的问题,是系统中的监控部分,现有系统没有监控功能,所以每次都是“事后”(业务人员反馈过来)处理,反馈的时候,系统可能已经出问题很长一段时间了,

4 流程优化

在这里插入图片描述

说明:

  1. 使用程序每间隔5分钟访问合同系统
  2. 正常访问,不进行任何操作
  3. 异常访问,则调用脚本进行重启合同系统服务
  4. 异常重启后,写日志和发送邮件

5 实际操作

5.1 编制监测脚本

编制完毕测试没有问题后,使用工具将python脚本,打包成oam_contact.exe可执行文件。

#!/usr/bin/env python
# -*- coding=utf8 -*-
#
# Copyright	: Copyright 2021 shalter Inc.
# File					: oam_contract.py
# Introduce	:  	1、访问合同系统根据返回值和设置超时时间判断合同系统是否正常
#               2、如果不正常,重启合同脚本服务,写日志发送邮件通知维护人员
#               3、读取配置信息使用密文
# Version		: V1.0.2
# Author		: shalter
# Time			: 2021-03-14

import requests
import os
import smtplib
import time
from email.mime.text import MIMEText
from email.utils import formataddr

def encrypt(key, s):
    b = bytearray(str(s).encode("utf-8"))
    n = len(b)
    c = bytearray(n*2)
    j = 0
    for i in range(0, n):
        b1 = b[i]
        b2 = b1 ^ key
        c1 = b2 % 19
        c2 = b2 // 19
        c1 = c1 + 46
        c2 = c2 + 46
        c[j] = c1
        c[j+1] = c2
        j = j+2
    return c.decode("utf-8")

def decrypt(ksa, s):
    c = bytearray(str(s).encode("utf-8"))
    n = len(c)
    if n % 2 != 0:
        return ""
    n = n // 2
    b = bytearray(n)
    j = 0
    for i in range(0, n):
        c1 = c[j]
        c2 = c[j + 1]
        j = j + 2
        c1 = c1 - 46
        c2 = c2 - 46
        b2 = c2 * 19 + c1
        b1 = b2 ^ ksa
        b[i] = b1
    return b.decode("utf-8")

def send_alert_mail():
    my_sender = decrypt(23, 'w2fFW5627whpveuZJx3Z4AW')  # 发件人邮箱账号
    my_pass = decrypt(10, '1vC17YlWHM')   # 发件人邮箱密码
    my_user = decrypt(19, 'gEG4HkErRqTnFqfEbfI') # 收件人邮箱账号,邮箱组

    def mail():
        ret = True
        try:
            msg = MIMEText('合同系统异常进行了服务重启操作', 'plain', 'utf-8')
            msg['From'] = formataddr(["运维组", my_sender])  # 括号里的对应发件人邮箱昵称、发件人邮箱账号
            msg['To'] = formataddr(["维护人员", my_user])  # 括号里的对应收件人邮箱昵称、收件人邮箱账号
            msg['Subject'] = "合同系统告警邮件"  # 邮件的主题,也可以说是标题

            server = smtplib.SMTP_SSL("smtp.qiye.163.com", 994)  # 发件人邮箱中的SMTP服务器,端口是25
            server.login(my_sender, my_pass)  # 括号中对应的是发件人邮箱账号、邮箱密码
            server.sendmail(my_sender, [my_user, ], msg.as_string())  # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件
            server.quit()  # 关闭连接
        except Exception:  # 如果 try 中的语句没有执行,则会执行下面的 ret=False
            ret = False
        return ret

    ret = mail()
    if ret:
        print("邮件发送成功")
    else:
        print("邮件发送失败")

def write_log():
    error_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
    with open('D:\\hhmonitor\\ht_log.txt', 'a', encoding='utf-8') as fp:
        fp.write(error_time + " 合同系统进行了重启操作 \n")

def detect_os(deal_url):
    res = requests.get(deal_url)
    if res.status_code == 200 and int(res.elapsed.total_seconds()) < 6:
        print('合同系统正常')
    else:
        print('合同系统异常')
        os.system("D:\\hhmonitor\\restartht.bat")
        send_alert_mail()
        write_log()

def main():
    deal_url = 'http://ht.xxxyyy.com/login.html'
    detect_os(deal_url)

if __name__ == '__main__':
    main()

5.2 编制启动脚本

启动脚本在检测脚本检测到合同异常的时候调用

D:\hhmonitor\restartht.bat

@echo off
net stop htserver
ping -n 5 127.0.0.1>nul
net start hhserver

5.3 创建定时任务

5.3.1 服务器管理器

开始—管理工具—服务器管理器
在这里插入图片描述
在打开的界面中选择 服务器管理器—配置—任务计划程序—任务计划程序库
在这里插入图片描述

5.3.2 定时任务计划

创建任务
在常规标签中 输入名词,填写描述
在这里插入图片描述

5.3.3 触发器

点击“新建”按钮,在新建触发器中的高级设置中勾选重复任务间隔

在这里插入图片描述

5.3.4 操作

操作选项卡中为设置需要执行的操作
点击操作选项卡—点击“新建”按钮。
新建操作中,操作—启动程序 设置中通过浏览选到打包完毕的合同检测程序。
在这里插入图片描述

5.4 验证

查阅邮件查看合同系统的重启次数和时间
在这里插入图片描述
在这里插入图片描述

以上为针对合同系统监测处理步骤,处理过后,很少收到业务部门的反馈,对业务使用人员来说,系统的可用性和稳定性有了很大的提高,见仁见智,系统还是那个系统,问题还在发生,只是在问题发生之初的5分钟之内通过程序进行了处理,提高了使用人员使用系统的无障碍体验。 方法可能不是最好,但是在一定程度上缓解了问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值