CherryPy не слушает SIGHUP // демонизирует скрипт CherryPy

#python #signals #ubuntu-16.04 #daemon #cherrypy

#python #сигналы #ubuntu-16.04 #демон #cherrypy

Вопрос:

Я разработал Telegram-бота с фреймворком CherryPy и пытаюсь развернуть его на экземпляре EC2.

Поскольку мой скрипт на python не является демоном, CherryPy, похоже, отключает его при получении SIGHUP (мой терминал закрывается). Я не хочу, чтобы это происходило, и, похоже, есть способ изменить то, как CherryPy обрабатывает эти сигналы:

Из документов:

Вы можете изменить, какие сигналы прослушивает ваше приложение и что оно делает, когда получает сигналы, путем изменения :attr: SignalHandler.handlers , диктанта пар {имя сигнала: обратный вызов}. По умолчанию установлено::

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

Мой текущий скрипт имеет cherrypy.config.update() соответствующий словарь конфигурации сервера и cherrypy.server.quickstart() . Могу ли я также заставить его не обрабатывать сигналы?

Или я должен просто развернуть свой скрипт как демон? Если да, то как я могу сделать это встроенным в Ubuntu?

Комментарии:

1. Я бы рекомендовал вам использовать готовый к производству сервер WSGI в рабочей среде. Смотрите docs.cherrypy.org/en/latest/deploy.html#wsgi-servers .

2. @uphill это на самом деле не решает мою проблему с желанием, чтобы скрипт выполнялся непрерывно.

3. Верно, но сервер wsgi поддерживает непрерывную работу

Ответ №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 )