我正在尝试安装并启动一个简单的 CherryPy 服务器作为 Windows 服务。
这是脚本:(删除了一些行以使其简短。从命令行手动执行时它完全可以工作)
app = AdminMediaHandler(django.core.handlers.wsgi.WSGIHandler())
logged_app = TransLogger(app)
server = wsgiserver.CherryPyWSGIServer( ('127.0.0.1', 8632), logged_app, server_name='localhost', numthreads=20 )
try:
server.start()
except KeyboardInterrupt:
server.stop()
我正在使用
sc.exe
安装并启动该服务。安装顺利,但我似乎无法启动服务。
使用的命令是:(注意路径中有空格,尽管我用双引号处理它,并且
binPath
在通过命令行手动执行其字符串时正在工作)
> sc.exe create "ServiceName" binPath= "\"C:\Path to Python\python.exe\" \"C:\Path to CherryPy Script\cherryserver.py\""
> sc.exe start "ServiceName"
无论尝试使用
sc.exe
还是通过 services.msc
GUI 启动服务,我都会不断收到此错误:
[SC] StartService FAILED 1053:
The service did not respond to the start or control request in a timely fashion.
据我了解,发生这种情况是因为
python.exe
没有实现 Windows 服务 API。
我不想使用
py2exe从脚本创建
.exe
。
我发现这个答案建议使用与
sc.exe
不同的工具安装服务,称为srvany.exe
和instsrv.exe
。但是,我在 Win2K Resource Kit 网站中找不到它们。
有人知道如何在 Windows 上成功安装和启动这个
.py
吗?
有人知道吗
CherryPy 附带一个用于作为 Windows 服务启动的模块。有关如何安装和运行它的说明,请参阅this other SO question。您可能想要从当前的方法(将 Django 应用程序直接传递到 WSGIServer)切换并使用 cherrypy.tree.graft 来代替。
我更喜欢使用 nssm 将普通脚本安装为服务。 您可以根据您的系统将 nssm.exe 复制到 C:\Windows\system32 或 C:\Windows\SysWOW64 目录中。之后,您可以按如下方式安装服务:
nssm install yourservicename
对于 python 脚本,您必须将应用程序路径设置为 python.exe,参数是您的脚本自身。
用于启动/停止/编辑服务的其他常用命令是:
nssm start yourservicename
nssm stop yourservicename
nssm edit yourservicename
我最终使用了ServiceInstaller又名SMaster,如此答案中所述。给定答案中的 URL 已损坏,我找不到有效的 URL。我事先就在当地有
srunner.exe
。
请注意,还有另一个障碍需要克服,因为 ServiceInstaller 无法处理路径中带有 空格 的文件。
因此,我使用旧的 DOS 路径格式来进行服务注册。
我没有注册
C:\Program Files\MyApp\python.exe
,而是注册了C:\PROGRA~1\MyApp\python.exe
。