如何终止作为服务运行的应用程序?

我能得到我的烧瓶应用程序作为服务运行感谢是否有可能在Windows中运行Python脚本作为服务? 如果可能,如何? ,但是当谈到阻止它,我不能。 我必须在任务pipe理器中终止进程。

这里是我的run.py,我通过run.py install变成一个服务:

from app import app from multiprocessing import Process import win32serviceutil import win32service import win32event import servicemanager import socket class AppServerSvc (win32serviceutil.ServiceFramework): _svc_name_ = "CCApp" _svc_display_name_ = "CC App" def __init__(self,args): win32serviceutil.ServiceFramework.__init__(self,args) self.hWaitStop = win32event.CreateEvent(None,0,0,None) socket.setdefaulttimeout(60) def SvcStop(self): self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) win32event.SetEvent(self.hWaitStop) server.terminate() server.join() def SvcDoRun(self): servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, servicemanager.PYS_SERVICE_STARTED, (self._svc_name_,'')) self.main() def main(self): server = Process(app.run(host = '192.168.1.6')) server.start() if __name__ == '__main__': win32serviceutil.HandleCommandLine(AppServerSvc) 

我从这个post得到了这个过程的东西: http : //librelist.com/browser/flask/2011/1/10/start-stop-flask/#a235e60dcaebaa1e134271e029f801fe,但不幸的是它也不起作用。

事件查看器中的日志文件说全局variables“服务器”没有定义。 但是,我已经使服务器的全局variables,它仍然给我同样的错误。

我建议你使用http://supervisord.org/ 。 其实在Windows中不能工作,但是在Cygwin中,你可以像在Linux中一样运行管理程序,包括作为服务运行。

安装Supervisord: https : //stackoverflow.com/a/18032347/3380763

安装后,你必须配置应用程序,这里的一个例子: http : //flaviusim.com/blog/Deploying-Flask-with-nginx-uWSGI-and-Supervisor/ (没有必要使用Nginx的监督员的配置是足够的)

停止Win32服务器之前,可以正常停止Werkzeug Web服务器。 例:

 from flask import request def shutdown_server(): func = request.environ.get('werkzeug.server.shutdown') if func is None: raise RuntimeError('Not running with the Werkzeug server') func() @app.route('/shutdown', methods=['POST']) def shutdown(): shutdown_server() return 'server shutting down...' 

如果将此添加到您的Flask服务器,则可以通过向/shutdown发送POST请求来请求正常的服务器/shutdown 。 您可以使用请求或urllib2来做到这一点。 根据您的情况,您可能需要保护此路线免受未经授权的访问。

一旦服务器停止,我想你将不得不停止Win32服务。

请注意,上面的关机代码出现在这个Flask代码片段中 。