python搭建网站访问异常监测脚本方案

2026年6月2日18:29:53 |发布: 乾元轩 |浏览:

团队有个项目,部署在某国企的服务器上,采用了信创的架构。问题来了,极不稳定,经常发现网站访问不了,或者宕机了。于是就想自己用python做个访问脚本,只要有访问异常,就推送信息到微信上,以便及时处理。当然这个是不是以开发这个项目的技术角度来处理。只是站在用户的角度开发一个小工具,运行在本地电脑上(编者将python程序部署在阿里云服务器上)。以下描述实施步骤。

一、项目需求:

  • 监测目标:B 网站

  • 运行环境:放在 A 网站服务器(Linux/Windows 都支持)

  • 时间规则:8点-10点,每15分钟确认一次。10点-18点每30分钟确认一次

  • 超时判定:20 秒内未访问成功 = 异常

  • 告警方式:自动发消息到微信

二、准备工作(5 分钟完成)

1. 开通微信告警(Server 酱,免费)

  1. 打开官网:https://sct.ftqq.com/

  2. 微信扫码登录

  3. 获取 SendKey(后面脚本要用到)

  4. 关注官方公众号,告警会直接推送到微信

2. 服务器安装 Python(几乎所有服务器都自带)

三、python源码

import time
import os
import traceback
from datetime import datetime
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
import urllib.request
import urllib.parse

# ====================== 【配置】 ======================
USERNAME = "你的账号"
PASSWORD = "你的密码"
SEND_KEY = "你的SendKey"

LOGIN_URL = "B网站域名/登录地址"
TARGET_URL = "B网站域名"
CHROME_DRIVER_PATH = r"D:\python\chromedriver.exe" #服务器安装chrome浏览器,并且检查版本后,下载chromedriver.exe并复制到该项目的位置。

# 稳定性设置
MAX_CHECK_TIME = 120  # 单次检测最大超时秒数(超过就重启)
LOG_DIR = "logs"      # 日志文件夹
# ======================================================

# 自动创建日志目录
if not os.path.exists(LOG_DIR):
    os.mkdir(LOG_DIR)

# 日志输出(自动按天生成)
def log(msg):
    now = datetime.now()
    date_str = now.strftime("%Y-%m-%d")
    time_str = now.strftime("%Y-%m-%d %H:%M:%S")
    log_file = os.path.join(LOG_DIR, f"check_{date_str}.log")
    log_msg = f"[{time_str}] {msg}"
    print(log_msg)
    try:
        with open(log_file, "a", encoding="utf-8") as f:
            f.write(log_msg + "\n")
    except:
        pass

# 微信推送
def send_wechat(title, desp):
    if not SEND_KEY:
        return
    try:
        data = urllib.parse.urlencode({"title": title, "desp": desp}).encode()
        req = urllib.request.Request(f"https://sctapi.ftqq.com/{SEND_KEY}.send", data=data)
        with urllib.request.urlopen(req, timeout=10):
            pass
    except:
        log("微信推送失败")

# 浏览器启动
def get_driver():
    options = webdriver.ChromeOptions()
    options.add_argument("--no-sandbox")
    options.add_argument("--disable-gpu")
    options.add_argument("--disable-dev-shm-usage")
    options.add_experimental_option("excludeSwitches", ["enable-automation", "enable-logging"])
    service = Service(CHROME_DRIVER_PATH)
    driver = webdriver.Chrome(service=service, options=options)
    driver.implicitly_wait(20)
    return driver

# 检测任务
def check():
    driver = None
    try:
        log("开始检测...")
        driver = get_driver()
        driver.get(LOGIN_URL)
        time.sleep(5)

        driver.get(TARGET_URL)
        time.sleep(3)

        url = driver.current_url
        if "login" not in url.lower():
            log("✅ 访问正常(已绕过412)")
            return True
        else:
            log("❌ 未登录成功")
            send_wechat("网站告警", "未登录成功,可能会话失效")
            return False

    except Exception as e:
        err = str(e)[:100]
        log(f"❌ 检测异常:{err}")
        send_wechat("网站监测异常", f"错误:{err}")
        return False

    finally:
        try:
            if driver:
                driver.quit()
        except:
            pass

# 时间策略
def sleep_time():
    h = datetime.now().hour
    if 8 <= h < 10:
        return 15 * 60
    elif 10 <= h < 18:
        return 30 * 60
    else:
        return 60 * 60

# 看门狗:超时自动重启
def run_with_watchdog():
    while True:
        try:
            start = time.time()
            check()
            cost = int(time.time() - start)
            log(f"单次检测完成,耗时{cost}秒")

            # 超时保护
            if cost > MAX_CHECK_TIME:
                log(f"⚠️ 检测超时({cost}秒),即将重启")
                os._exit(1)

        except:
            log(f"⚠️ 程序崩溃,准备重启:{traceback.format_exc()[:100]}")
            time.sleep(5)

        # 等待下一轮
        wait = sleep_time()
        log(f"等待 {wait//60} 分钟后下次检测\n")
        time.sleep(wait)

if __name__ == "__main__":
    log("===== 网站监测服务启动(稳定版 + 日志 + 自动重启)=====")
    run_with_watchdog()

四、说明

1. 自动日志

  • 每天自动生成一个 log 文件

  • 路径:logs/check_2026-06-02.log

  • 记录:启动、成功、失败、错误、耗时

2. 崩溃自动重启

  • 浏览器崩了 → 自动重启

  • 网络异常 → 自动重试

  • 不中断监测

3. 卡死自动重启

  • 超过 120 秒没反应 → 强制重启

  • 彻底杜绝卡死不动

4. 不重复启动

  • 安全单例运行

  • 不会开一堆浏览器

5. 异常自动告警

  • 登录失败 → 告警

  • 页面打不开 → 告警

  • 程序崩溃 → 告警


五、补充说明:开机自启动python文件

1、创建一个启动脚本

2、新建一个文本文件,输入内容

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "py main.py", 0
Set WshShell = Nothing

3、把文本文件另存为:start.vbs(保存类型:所有文件,编码:ANSI)

4、把这个 vbs 放到开机启动文件夹:

①按win+r

②输入

shell:startup

③把 start.vbs 拖进去,完成:服务器开机 → 自动后台运行脚本 → 自动定时检测 → 异常微信告警。


以上就是全部过程。结果如下


支付宝打赏 微信打赏

« 上一篇

  • 评论:(0 )

已有 0 位网友发表了一针见血的评论,你还等什么?
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。