我已经用CherryPy框架开发了Telegram Bot,并试图将其部署在EC2实例上。
由于我的python脚本不是守护程序,因此CherryPy似乎在收到SIGHUP时将其关闭(我的终端关闭了)。我不希望这种情况发生,并且似乎有一种方法可以修改CherryPy处理这些信号的方式:
来自docs:
您可以修改应用程序侦听的信号及其内容 确实 当它收到信号时,通过修改:attr:
SignalHandler.handlers
, {信号名称:回调}对的字典。默认设置为::handlers = {'SIGTERM': self.bus.exit, 'SIGHUP': self.handle_SIGHUP, 'SIGUSR1': self.bus.graceful}
我当前的脚本有一个带有相关服务器配置字典的cherrypy.config.update()
和一个cherrypy.server.quickstart()
。我还可以使其不处理信号吗?
还是应该仅将脚本部署为守护程序?如果是这样,我该如何在Ubuntu上原生?
答案 0 :(得分:1)
CherryPy附带一个内置的守护程序,将调用夹在配置更新和quickstart
之间,如下所示:
cherrypy.config.update(...)
cherrypy.process.plugins.Daemonizer(cherrypy.engine).subscribe()
cherrypy.process.plugins.SignalHandler(cherrypy.engine).subscribe()
cherrypy.quickstart(...)
您可能会考虑的另一种选择是在诸如Supervisor(http://supervisord.org/)之类的进程控制器后面运行服务器