Jenkins启动Python Flask服务后无法标记成功持续加载问题求助
根因分析
python -m flask run属于前台阻塞型进程,启动后会持续占用当前终端会话,不会主动退出- 你通过SSH远程执行
run.bat时,SSH会话会等待所有前台进程执行结束才会返回退出码,Jenkins任务会持续等待SSH命令返回,因此一直处于运行状态,不会标记为完成。
解决方案
方案1:修改批处理脚本后台启动(轻量快速,适合测试环境)
修改run.bat最后一行启动命令,使用Windows自带的start命令后台拉起Flask进程:
start /B python -m flask run
/B参数指定不创建新终端窗口,后台启动进程,执行后批处理脚本会直接结束,SSH会话可正常返回,Jenkins就能正常结束任务。
建议在批处理脚本开头添加旧进程清理逻辑,避免重复启动出现端口占用问题:
:: 清理占用5000端口的旧Flask进程,默认Flask端口为5000,可自行修改为你实际使用的端口 for /f "tokens=5" %%a in ('netstat -ano ^| findstr :5000') do taskkill /f /pid %%a 2>nul
方案2:注册为系统服务(稳定可靠,适合生产环境)
使用nssm工具将Flask服务注册为Windows系统服务,可实现开机自启、崩溃自动恢复,完全脱离终端会话不会阻塞SSH返回:
- 下载nssm工具并添加到系统环境变量
- 执行
nssm install ContactPortalFlask,在弹出的配置界面中:- 路径选择你的Python可执行文件路径
- 参数填写
-m flask run - 工作目录填写
C:\workspace\ContactPortal_Flask
- 将
run.bat中的启动命令替换为:
net start ContactPortalFlask
补充说明
你当前使用的FLASK_ENV=development是开发模式,自带的调试服务器性能低、安全性差,不适合生产环境使用,生产环境建议搭配waitress等Windows兼容的WSGI服务器部署。
内容的提问来源于stack exchange,提问作者Miri Choi
相关产品推荐
相关产品推荐

