You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带无限循环的Python定时脚本被Windows任务计划打断如何解决?

针对该问题的可行解决建议

第一步:先定位脚本终止原因

  • 给脚本增加运行日志和全局异常捕获,确认脚本是自身报错退出还是被系统/其他任务强制终止。可以对比日志记录的退出时间和另一个定时任务的触发时间,匹配度高则说明两个任务存在资源或配置冲突。
  • 查看Windows事件查看器:进入「Windows日志-应用程序」,筛选对应时间点的日志项,确认是否存在Python进程崩溃、系统资源不足触发的进程回收记录。
  • 检查两个定时任务的配置:
    • 如果你的selenium脚本也是通过Windows任务计划启动,确认是否勾选了「超时自动停止任务」「电量切换时停止任务」这类默认开启的限制项,同时确认脚本的运行优先级是否低于另一个任务。
    • 检查另一个定时任务的逻辑,确认是否存在查杀Python进程、chromedriver进程、Chrome进程的相关操作。

第二步:针对性优化修复

代码层面优化

  • 增加全局异常捕获和资源自动清理逻辑,避免资源波动、浏览器偶发崩溃带崩整个调度循环,参考修改后的代码:
import schedule
import time
import logging
import traceback
import os

# 配置持久化日志
logging.basicConfig(
    level=logging.INFO,
    filename='selenium_scheduler.log',
    format='%(asctime)s - %(levelname)s - %(message)s'
)

def get_info():
    try:
        logging.info("启动抓取任务")
        # 原有抓取逻辑保留在这里
    except Exception as e:
        logging.error(f"抓取任务出错: {str(e)}\n{traceback.format_exc()}")
        # 自动清理残留的浏览器进程,避免资源泄漏
        os.system("taskkill /f /im chromedriver.exe /t >nul 2>&1")
        os.system("taskkill /f /im chrome.exe /t >nul 2>&1")

schedule.every(2).minutes.until("18:30").do(get_info)

if __name__ == "__main__":
    logging.info("调度脚本启动")
    # 自动提升当前进程优先级
    os.system(f"wmic process where processid={os.getpid()} CALL setpriority 128 >nul 2>&1")
    while True:
        try:
            schedule.run_pending()
            time.sleep(1)
        except KeyboardInterrupt:
            logging.info("手动终止脚本")
            break
        except Exception as e:
            logging.error(f"调度循环出错: {str(e)}\n{traceback.format_exc()}")
            time.sleep(3)
  • 给Chrome启动配置增加独立用户目录,避免和其他Chrome实例冲突,Selenium启动参数参考:
from selenium import webdriver
options = webdriver.ChromeOptions()
# 配置独立的用户数据目录,提前手动创建对应文件夹即可
options.add_argument(r"--user-data-dir=C:\selenium_chrome_profile")
options.add_argument("--no-sandbox")
options.add_argument("--disable-dev-shm-usage")
driver = webdriver.Chrome(options=options)

系统层面优化

  • 优先用管理员权限运行脚本,避免权限不足被其他任务抢占资源。
  • 改用NSSM工具将脚本注册为Windows系统服务,系统服务的运行优先级高于普通任务计划触发的进程,不会被普通任务随便终止,同时支持系统重启后自动拉起。
  • 调整另一个定时任务的执行时间,尽量和你的2分钟抓取任务错开,避免同时运行抢占CPU、内存资源。

兜底方案

如果始终无法定位终止原因,可以额外写一个轻量监控脚本,每分钟检查一次你的调度脚本进程是否存在,不存在则自动重启,监控脚本可通过Windows任务计划设置为每分钟执行一次。

内容的提问来源于stack exchange,提问作者arak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 11:30:05