您的位置:首页 > 科技 > 能源 > 最好免费高清视频下载_最新新闻事件今天地震_站长seo推广_武汉seo建站

最好免费高清视频下载_最新新闻事件今天地震_站长seo推广_武汉seo建站

2025/4/3 11:29:35 来源:https://blog.csdn.net/weixin_43644470/article/details/146421096  浏览:    关键词:最好免费高清视频下载_最新新闻事件今天地震_站长seo推广_武汉seo建站
最好免费高清视频下载_最新新闻事件今天地震_站长seo推广_武汉seo建站

这是我服务器上运行了很多服务,用来检测服务是否正常的一个小软件。需要自己打包,这是源码。如有需要也可以下载我已经打包好的文件。

import socket
import tkinter as tk
from tkinter import messagebox
import json
import time
import logging
from datetime import datetime
from colorama import init, Fore
from logging.handlers import TimedRotatingFileHandler
import threading# 初始化 colorama
init(autoreset=True)# 配置日志
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)# 创建一个 TimedRotatingFileHandler,每天轮换一次日志文件,保留 7 天的备份
handler = TimedRotatingFileHandler(filename='service_checker.log',when='midnight',  # 每天午夜轮换日志文件interval=1,  # 间隔 1 天backupCount=7,  # 保留 7 个备份encoding='utf-8'  # 指定编码格式为 UTF-8
)# 设置日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)# 为日志记录器添加处理器
logger.addHandler(handler)# 自定义日志格式化类
class ColoredFormatter(logging.Formatter):def format(self, record):# 如果是错误或异常日志,使用红色if record.levelno >= logging.ERROR:record.msg = Fore.RED + str(record.msg) + Fore.RESET# 如果是警告日志,使用黄色elif record.levelno == logging.WARNING:record.msg = Fore.YELLOW + str(record.msg) + Fore.RESET# 如果是信息日志,保持默认颜色else:record.msg = str(record.msg)return super().format(record)# 为控制台处理器设置自定义格式化
console_handler = logging.StreamHandler()
console_handler.setFormatter(ColoredFormatter())
logger.addHandler(console_handler)# 创建一个 Tkinter 根窗口,并将其隐藏
root = tk.Tk()
root.withdraw()def check_service(host, port):"""检查服务是否正常运行:param host: 服务的IP地址:param port: 服务的端口号:return: 服务是否正常运行"""try:with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:s.settimeout(5)result = s.connect_ex((host, port))return result == 0except Exception as e:logger.error(f"检测服务 {host}:{port} 时发生错误: {e}")return Falsedef show_alert(service_name, host, port):"""显示服务异常的提示框:param service_name: 服务名称:param host: 服务的IP地址:param port: 服务的端口号"""def alert():messagebox.showwarning("服务异常", f"服务 {service_name} ({host}:{port}) 无法正常连接!")# 使用主线程的安全方法来显示提示框root.after(0, alert)def load_services_from_config(config_file):"""从配置文件中加载服务信息:param config_file: 配置文件路径:return: 服务信息列表"""try:with open(config_file, 'r', encoding='utf-8') as file:config = json.load(file)return config.get("services", [])except Exception as e:logger.error(f"读取配置文件时发生错误: {e}")return []def main():# 加载服务配置services = load_services_from_config("services.json")if not services:logger.error("未加载到任何服务,程序即将退出。")returnlogger.info(f"开始持续检测 {len(services)} 项服务,按 Ctrl+C 可终止程序。")try:while True:# 遍历所有服务进行检测for service in services:host = service["host"]port = service["port"]name = service["name"]if check_service(host, port):logger.info(f"服务 {name} ({host}:{port}) 状态: 正常")else:logger.error(f"服务 {name} ({host}:{port}) 状态: 异常")show_alert(name, host, port)# 每次检测后等待一段时间(例如5分钟)logger.info("完成一次检测,等待下次检测...")time.sleep(300)except KeyboardInterrupt:logger.info("\n用户终止了程序,检测已停止。")if __name__ == "__main__":main()

使用方法

  1. 将上述代码保存为 service_checker.py。
  2. 确保 services.json 配置文件在同一目录下。
  3. 运行脚本后,程序会开始持续检测服务状态,每 5 分钟检测一次。
  4. 如果检测到服务不正常,会弹出提示框提醒用户,但不会阻塞其他服务的检测。
  5. 按下 Ctrl+C 可以终止程序运行。

打包为 .exe 文件

使用 pyinstaller 打包时,确保所有依赖库都被正确包含:

pyinstaller --onefile --hidden-import=colorama --hidden-import=logging.handlers service_checker.py

services.json文件示范(修改或增加、删除按照文件内形式进行修改即可)

{"services": [{"host": "192.168.10.151","port": 8079,"name": "官网后端(正式环境)"},{"host": "192.168.10.152","port": 8080,"name": "官网web(正式环境)"},{"host": "192.168.10.153","port": 8078,"name": "官网后台管理(正式环境)"},{"host": "192.168.10.154","port": 6380,"name": "redis"},{"host": "192.168.10.155","port": 8181,"name": "日志管理系统"}]
}

检测程序端口服务程序下载地址:

点击下载打包完成的程序(访问密码: 2747)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com