#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 定时执行 init_proxy.py 脚本 每整十分钟执行一次(00、10、20、30、40、50分) """ import time import datetime import subprocess import sys import os import logging from pathlib import Path # 设置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s', handlers=[ logging.FileHandler('scheduler_init_proxy.log', encoding='utf-8'), logging.StreamHandler() ] ) logger = logging.getLogger(__name__) def execute_init_proxy(): """执行 init_proxy.py 脚本""" try: script_path = Path(__file__).parent / "init_proxy.py" if not script_path.exists(): logger.error(f"脚本文件不存在: {script_path}") return False # 使用当前 Python 解释器执行脚本 - 兼容老版本Python result = subprocess.run( [sys.executable, str(script_path)], stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True ) if result.returncode == 0: logger.info("init_proxy.py 执行成功") if result.stdout and result.stdout.strip(): logger.info(f"输出: {result.stdout.strip()}") else: logger.error(f"init_proxy.py 执行失败,返回码: {result.returncode}") if result.stderr and result.stderr.strip(): logger.error(f"错误信息: {result.stderr.strip()}") return result.returncode == 0 except Exception as e: logger.error(f"执行 init_proxy.py 时发生异常: {e}") return False def wait_for_next_execution(): """等待到下一个整十分钟""" now = datetime.datetime.now() current_minute = now.minute # 计算下一个整十分钟 next_minute = ((current_minute // 10) + 1) * 10 # 处理小时进位 if next_minute >= 60: next_minute = 0 next_execution = now.replace(minute=0, second=0, microsecond=0) + datetime.timedelta(hours=1) else: next_execution = now.replace(minute=next_minute, second=0, microsecond=0) wait_seconds = (next_execution - now).total_seconds() logger.info(f"当前时间: {now.strftime('%Y-%m-%d %H:%M:%S')}") logger.info(f"下次执行时间: {next_execution.strftime('%Y-%m-%d %H:%M:%S')}") logger.info(f"等待 {wait_seconds:.0f} 秒") return wait_seconds def main(): """主函数""" logger.info("代理重置定时器启动") logger.info("脚本将在每整十分钟执行一次 init_proxy.py") # 首次执行 logger.info("执行首次代理重置...") execute_init_proxy() # 定时循环 while True: try: wait_seconds = wait_for_next_execution() time.sleep(wait_seconds) logger.info("开始执行定时任务...") execute_init_proxy() except KeyboardInterrupt: logger.info("接收到中断信号,程序退出") break except Exception as e: logger.error(f"定时器运行异常: {e}") # 发生异常时等待60秒后继续 time.sleep(60) if __name__ == "__main__": main()