由于supervisor不支持windows,但要防止程序异常中断,所以需要采取措施
通过pywin32,使得flask以服务的方式运行
创建pythonservice.py
安装服务:python flaskservice.py install
启动服务:python flaskservice.py start
停止服务:python flaskservice.py stop
删除服务:python flaskservice.py remove
出现的问题即解决过程:
flask不能以debug模式启动,必须关掉debug
问题:服务没有及时响应启动或控制请求
查了下,通过python flaskservice debug的方式,但错误信息是注册表问题,操作了半天的注册表,问题依然存在
之后查到NSSM也可以通过服务的方式运行,但报错信息还是一致,所以原因应该是一样的
通过查看windows日志解决问题:
(参考:https://blog.csdn.net/ywg_1994/article/details/82430943)
之后看了下报错信息,提示可以查看windows日志,这下打开了新世界的大门
控制面板-系统和安全-管理工具-查看事件日志,等加载完毕,左侧选择windows日志-应用程序,这时观察右边,里面果然有Flask Service,点击查看错误信息
但明明是安装了的
有了日志就不怕了,出了问题都可以知道原因,解决即可
通过whl手动指定安装位置:
(但pip install --target=c:\program files\python\….. jinja2,显示files\…目录未找到,wtf)
最后通过下载whl文件,将文件放到目标目录,pip install xx.whl完成指定目录的模块安装
之后启动服务提示未找到markupsafe,同样下载whl进行安装
问题:提示服务开启后又被关闭
日志中:The instance's SvcRun() method failed <Error getting traceback - traceback.print_exception() failed %2: %3
在pythonservice.py的最前面添加下面语句:
然后重启服务,果然可以了;(原因不是很清楚,问题应该是无法输出错误信息,解决方案思路应该是给标准输出指定一个设备空文件)
之后在flask服务中设置:程序异常后-重新启动即可
也可以配合pyinstaller使用,更方便
在虚拟环境中也是可以的,操作与之前一样
python的服务主要是依赖于PythonService.exe和所写的服务文件(pythonservice.py)
保证这两个路径即可:
PythonService.exe的路径在服务中就可以查看
服务运行文件可以在服务的注册表中查看:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services
如果安装上面直接不可以启动的话,参考:https://stackoverflow.com/questions/34696815/using-pythonservice-exe-to-host-python-service-while-using-virtualenv
其他:
python xxservice.py debug就是坑,最后已经可以启动服务了,执行还是报注册表未找到错误,wtf
中间还尝试了windows-supervisor,结果根本就不行
stackflow很完善,对于这些‘小众’的bug,都有相应的讨论及解决方案,很nice
流程:
python(环境变量配置,安装virtualenvwrapper,workon环境变量配置)
虚拟环境(安装模块的离线包)
安装服务,启动