CherryPy 不监听 SIGHUP // 守护 CherryPy 脚本

CherryPy don't listen for SIGHUP // daemonize CherryPy script

我已经使用 CherryPy 框架开发了一个 Telegram Bot,我正在尝试将其部署到 EC2 实例上。

由于我的 python 脚本不是守护进程,CherryPy 似乎在收到 SIGHUP 时将其关闭(我的终端关闭)。我不希望这种情况发生,似乎有一种方法可以修改 CherryPy 处理这些信号的方式:

来自docs

You can modify what signals your application listens for, and what it does when it receives signals, by modifying :attr:SignalHandler.handlers, a dict of {signal name: callback} pairs. The default set is::

    handlers = {'SIGTERM': self.bus.exit,
                'SIGHUP': self.handle_SIGHUP,
                'SIGUSR1': self.bus.graceful}

我当前的脚本有一个 cherrypy.config.update() 和相关的服务器配置字典,还有一个 cherrypy.server.quickstart()。我也可以让它不处理信号吗?

或者我应该将我的脚本部署为守护进程吗?如果是这样,我怎样才能做到 Ubuntu?

CherryPy 附带 built-in 守护程序,将调用夹在配置更新和 quickstart 之间,如下所示:

cherrypy.config.update(...)

cherrypy.process.plugins.Daemonizer(cherrypy.engine).subscribe()
cherrypy.process.plugins.SignalHandler(cherrypy.engine).subscribe()

cherrypy.quickstart(...)

您可能会考虑的另一个选择是 运行 您的服务器位于 Supervisor (http://supervisord.org/)

等过程控制器后面