安装并启动 CherryPy 服务器脚本作为 Windows 服务(使用 sc.exe)

问题描述 投票:0回答:3

我正在尝试安装并启动一个简单的 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
吗?

有人知道吗

python windows-services mod-wsgi wsgi cherrypy
3个回答
5
投票

CherryPy 附带一个用于作为 Windows 服务启动的模块。有关如何安装和运行它的说明,请参阅this other SO question。您可能想要从当前的方法(将 Django 应用程序直接传递到 WSGIServer)切换并使用 cherrypy.tree.graft 来代替。


2
投票

我更喜欢使用 nssm 将普通脚本安装为服务。 您可以根据您的系统将 nssm.exe 复制到 C:\Windows\system32C:\Windows\SysWOW64 目录中。之后,您可以按如下方式安装服务:

nssm install yourservicename

对于 python 脚本,您必须将应用程序路径设置为 python.exe,参数是您的脚本自身。

Basic configuration for nssm

用于启动/停止/编辑服务的其他常用命令是:

nssm start yourservicename
nssm stop yourservicename
nssm edit yourservicename

0
投票

我最终使用了ServiceInstaller又名SMaster,如此答案中所述。给定答案中的 URL 已损坏,我找不到有效的 URL。我事先就在当地有

srunner.exe

请注意,还有另一个障碍需要克服,因为 ServiceInstaller 无法处理路径中带有 空格 的文件

因此,我使用旧的 DOS 路径格式来进行服务注册。

我没有注册

C:\Program Files\MyApp\python.exe
,而是注册了
C:\PROGRA~1\MyApp\python.exe

© www.soinside.com 2019 - 2024. All rights reserved.