Я видел немало людей, борющихся с ним - у меня тоже проблемы. Было бы очень полезно, если бы кто-то помог сделать пример CherryPy Service. Было бы весьма полезно ознакомиться с этими вопросами.CherryPy как служба Windows - пример
Существует CherryPy в качестве службы Windows пример доступен по адресу: CherryPy Wiki. Я пытаюсь заставить его работать. Вот мой код:
"""
The most basic (working) CherryPy 3.0 Windows service possible.
Requires Mark Hammond's pywin32 package.
"""
import cherrypy
import win32serviceutil
import win32service
import win32event
import servicemanager
class HelloWorld:
""" Sample request handler class. """
def index(self):
return "Hello world!"
index.exposed = True
class MyService(win32serviceutil.ServiceFramework):
"""NT Service."""
_svc_name_ = "CherryPyService"
_svc_display_name_ = "CherryPy Service"
def __init__(self, args):
win32serviceutil.ServiceFramework.__init__(self, args)
# create an event that SvcDoRun can wait on and SvcStop
# can set.
self.stop_event = win32event.CreateEvent(None, 0, 0, None)
def SvcDoRun(self):
self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
servicemanager.PYS_SERVICE_STARTED,
(self._svc_name_,''))
cherrypy.tree.mount(HelloWorld(), '/')
# in practice, you will want to specify a value for
# log.error_file below or in your config file. If you
# use a config file, be sure to use an absolute path to
# it, as you can't be assured what path your service
# will run in.
cherrypy.config.update({
'global':{
'engine.autoreload.on': False,
'log.screen': False,
'log.error_file': 'c:\\MG\\temp\\CherryPy_Sample_Service.log',
'engine.SIGHUP': None,
'engine.SIGTERM': None
}
})
# set blocking=False so that start() does not block
cherrypy.server.quickstart()
cherrypy.engine.start(blocking=False)
# now, block until our event is set...
win32event.WaitForSingleObject(self.stop_event, win32event.INFINITE)
self.ReportServiceStatus(win32service.SERVICE_RUNNING)
def SvcStop(self):
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
cherrypy.server.stop()
win32event.SetEvent(self.stop_event)
if __name__ == '__main__':
win32serviceutil.HandleCommandLine(MyService)
Вышеупомянутый отличается от приведенного примера. Я добавил
self.ReportServiceStatus(win32service.SERVICE_START_PENDING)
иself.ReportServiceStatus(win32service.SERVICE_RUNNING)
как первый и последний отчет оSvcDoRun
'log.error_file': 'c:\\MG\\temp\\CherryPy_Sample_Service.log',
как вики инструктирует
Важное замечание: в то время как можно использовать консоль python cherrypy_sample_service.py install
, чтобы установить услугу, это невозможно, чтобы начать с использования python cherrypy_sample_service.py start
. Причиной этого является то, что созданная таким образом служба будет ссылаться на исполняемый файл python
, который не предназначен как служба.
Поэтому для моего дальнейшего тестирования я составил код, используя следующие:
from cx_Freeze import setup, Executable
exe = Executable(
script='cherrypy_sample_service.py'
)
build_options = {'includes': ['cherrypy', 'win32serviceutil', 'win32service', 'win32event', 'servicemanager']}
setup(
name = "CherryPy Sample Service",
version = "0.1",
service = ["cherrypy_sample_service.py"],
options = {"build_exe" : build_options},
executables = [exe])
Во время сборки я получаю следующее предупреждение:
Python27\App\lib\distutils\dist.py:267: UserWarning: Unknown distribution option: 'service'
warnings.warn(msg)
Я добавил этот параметр в соответствии с следующие stack problem answer.
Теперь я могу позвонить cherrypy_sample_service install
, cherrypy_sample_service remove
и cherrypy_sample_service update
. Тем не менее, пытаясь запустить службу (либо из услуг или через cherrypy_sample_service start
) приводит к следующей ошибке:
Error starting service: The service did not respond to the start or control request in a timely fashion.
И я застрял. Файл журнала даже не создается. Не могли бы вы помочь мне запустить этот пример? Думаю, это было бы полезно и для других людей, борющихся со связанными с ними проблемами, если бы мы могли объяснить пример и запустить его. Благодаря!
Я по-прежнему беззаботно болтаю с этим. Я попробовал это (просто простой сервис без вишни): http://stackoverflow.com/questions/32404/is-it-possible-to-run-a-python-script-as-a-service-in- windows-if-possible-how и не работает. Я использую Win7 (на разных машинах). Я предполагаю, что это связано с некоторыми привилегиями. – Maciejg