如何通过前端按钮触发重启整个Flask应用
Flask前端按钮触发应用重启实现方案
该需求可以实现,但存在较高安全风险,必须严格限制重启操作的权限,避免未授权用户随意关停服务。
方案1:单进程场景直接替换进程(适合本地开发/简单部署)
核心逻辑是在Python代码中直接调用系统接口替换当前运行的进程,效果等价于终止当前进程后重新执行启动命令。
前端HTML代码
<form action="/restart_function" method="post"> <input type="submit" value="Restart App"> </form>
Flask后端路由代码
import os import sys from flask import redirect, session @app.route('/restart_function', methods=['POST']) def restart(): # 权限校验必须配置,此处为示例,可替换为你自己的管理员校验逻辑 if not session.get('is_admin', False): return "无操作权限", 403 # 用完全相同的启动参数替换当前进程 os.execv(sys.executable, [sys.executable] + sys.argv) # 下方代码不会被执行 return redirect('/')
适用场景:仅适合单进程启动的场景,比如直接执行flask run启动、没有使用多进程服务容器的情况
方案2:配合进程管理器实现(生产环境推荐)
生产环境一般会用supervisor、systemd等工具管理Flask进程,只需要在路由中触发进程退出,进程管理器会自动按照预设的启动命令重新拉起服务,稳定性更高。
Flask后端路由代码
import sys from flask import redirect, session @app.route('/restart_function', methods=['POST']) def restart(): # 权限校验不可省略 if not session.get('is_admin', False): return "无操作权限", 403 # 退出当前进程,由外部管理工具自动重启 sys.exit()
适用场景:所有带进程管理的生产部署场景,也支持Gunicorn等多进程部署的情况,只要进程管理器配置了autorestart=true即可
注意事项
- 重启操作会中断所有正在处理的用户请求,建议操作前给出明确提示
- 多worker部署的场景下不要使用方案1,只会重启单个worker无法重启整个应用
- 权限校验必须覆盖所有可能的访问入口,禁止开放公共重启接口
内容的提问来源于stack exchange,提问作者Jonathan Chen
相关产品推荐
相关产品推荐

