#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 )