当前位置: 首页 > news >正文

Windows定时任务 每隔一段时间(最小到秒级)执行一次指定的Python脚本

脚本 service_check_admin.py

import requests
import subprocess
import sys
import os
import logging
from time import sleep# 配置日志 - 记录到文件以便后台运行时查看
LOG_FILE = "service_monitor1.log"
logging.basicConfig(level=logging.INFO,format='%(asctime)s - %(levelname)s - %(message)s',handlers=[logging.FileHandler(LOG_FILE),logging.StreamHandler(sys.stdout)  # 保留控制台输出(后台运行时不可见)]
)
logger = logging.getLogger(__name__)# 服务配置
SERVICE_URLS = ["http://127.0.0.1:8089/index.html"# "http://127.0.0.1:9999"
]
JAR_COMMAND = r"java -jar E:\qaml\datax\dataxweb\datax-admin-2.1.2.jar"  # 修改为你的JAR路径
# JAR_COMMAND = r"java -jar E:\qaml\datax\dataxweb\datax-executor-2.1.2.jar"
TIMEOUT = 10  # 请求超时时间(秒)
MAX_RETRIES = 2  # 检测失败时的重试次数
RETRY_DELAY = 5  # 重试间隔(秒)def check_service(url):"""检查单个服务的可用性"""try:response = requests.get(url, timeout=TIMEOUT)if response.status_code == 200:logger.info(f"服务正常: {url}")return Trueelse:logger.warning(f"服务响应异常: {url} (状态码: {response.status_code})")return Falseexcept requests.exceptions.RequestException as e:logger.error(f"服务连接失败: {url} - {str(e)}")return Falsedef check_all_services():"""检查所有服务的可用性(带重试机制)"""logger.info("开始服务健康检查...")for attempt in range(1, MAX_RETRIES + 1):all_ok = Truefor url in SERVICE_URLS:if not check_service(url):all_ok = Falsebreak  # 发现一个失败就停止检查其他URLif all_ok:logger.info(f"所有服务运行正常 (尝试 {attempt}/{MAX_RETRIES})")return Trueif attempt < MAX_RETRIES:logger.warning(f"检测失败,{RETRY_DELAY}秒后重试 ({attempt}/{MAX_RETRIES})")sleep(RETRY_DELAY)logger.error(f"所有 {MAX_RETRIES} 次尝试均失败")return Falsedef start_jar_service():"""在Windows后台启动JAR服务(无窗口)"""logger.info("尝试启动JAR服务...")try:# 使用Windows特有的CREATE_NO_WINDOW标志startupinfo = subprocess.STARTUPINFO()startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOWstartupinfo.wShowWindow = 0  # 0 = SW_HIDE (隐藏窗口)process = subprocess.Popen(JAR_COMMAND,stdout=open("jar_output1.log", "w"),stderr=open("jar_error1.log", "w"),startupinfo=startupinfo,creationflags=subprocess.CREATE_NO_WINDOW)logger.info(f"JAR服务已启动 (PID: {process.pid})")return Trueexcept Exception as e:logger.error(f"启动JAR服务失败: {str(e)}")return Falsedef main():"""主函数:执行一次完整的健康检查和必要的重启"""if check_all_services():logger.info("服务状态正常,无需操作")sys.exit(0)  # 正常退出else:logger.warning("检测到服务异常,尝试重启...")if start_jar_service():logger.info("服务重启成功")sys.exit(1)  # 异常但已处理else:logger.error("服务重启失败")sys.exit(2)  # 异常且处理失败if __name__ == "__main__":logger.info("====== 服务检测开始 ======")main()logger.info("====== 服务检测结束 ======")

 bat执行文件:start_check_admin.bat

@echo off
echo 进度 100% 已完成 >> status.log
start /B pythonw "D:\datax\dataxweb\service_check_admin.py"
exit

 

image

 

image

 

image

 

image

 

http://www.rkmt.cn/news/23077.html

相关文章:

  • ROS 2什么是QoS?
  • Nessus Professional 10.10 Auto Installer for macOS Tahoe
  • 2025年木饰面板行业Top10供应商终极评测及选择指南
  • 2025 年调节阀厂家最新推荐榜:衬氟 / 气动 / 电动全类型技术领先企业权威盘点,采购优选指南
  • 2025秋_14
  • Codeforces Round 966 (Div. 3) 题解
  • 探索 PHP-FPM 进程池的最佳配置方案:参数解析、场景适配与问题解决
  • 生活随感:和谐生活,你我共「营」 - tfel
  • 10.17 NOIP 模拟赛 T1. 并非贪心
  • 基于 JuiceFS 构建 AI 推理:多模态复杂 I/O、跨云与多租户支持
  • 【转】[C#] GlobalUsing 的使用
  • C++基本编程1——数位分离问题
  • 存储过程循环替代游标
  • 2025 消防培训学校最新推荐榜:实训实力解析,附选择指南消防考证培训学校推荐
  • JavaScript 中处理日期格式化
  • 2025年在线粘度计厂家推荐排行榜,实验室在线粘度计,工业在线粘度计,高精度在线粘度计公司推荐!
  • 2025年网格川字塑料托盘厂家推荐排行榜,耐用抗压,仓储物流首选!
  • 基于MATLAB的FIR和IIR低通/带通滤波器实现
  • 2025年沸腾制粒机厂家权威推荐榜:沸腾制粒/湿法混合/摇摆制粒机,专业性能与客户口碑深度解析及优质品牌推荐!
  • 2025年柴油发电机组厂家权威推荐榜:静音高效与持久耐用的行业首选!
  • 设备二维码图片下载
  • neural network中的tensor是什么?
  • 2025年工厂维保,工厂机电维修,工厂应急维修,工厂运维服务厂家推荐排行榜,专业高效与全方位保障之选!
  • 2025/10/17
  • 有没有人坐11.1号晚上9点的火车返回衡水,大家要一起走么
  • Cursor国内用户无法使用模型(Model not avilable)解决方案
  • 2025年10月超声波清洗机厂家推荐:榜单透视与选购要点
  • 2025年混合机厂家推荐排行榜,槽型/卧式槽型/双螺旋锥形/螺杆锥形/高速/立式高速/方锥/方锥型/螺带/卧式螺带/V型/双锥/一维/一维运动/二维/二维运动/三维运动/三维混合机公司推荐
  • 2025年网络推广/网络营销/网络营销推广服务商权威推荐榜单,专业策略与高效转化口碑之选!
  • Avaloni11开发笔记