Развертывание CherryPy (демон)
-
13-09-2019 - |
Вопрос
Я следовал базовому руководству по CherryPy (http://www.cherrypy.org/wiki/CherryPyTutorial).Одна вещь, которая не обсуждается, — это развертывание.
Как я могу запустить приложение CherryPy в качестве демона и «забыть об этом»?Что произойдет, если сервер перезагрузится?
Есть ли стандартный рецепт?Возможно, что-то, что создаст служебный скрипт (/etc/init.d/cherrypy...)
Спасибо!
Решение
Eсть демонизатор Плагин для CherryPy включен по умолчанию, что полезно для его запуска, но, безусловно, самый простой способ для простых случаев — использовать скрипт Cherryd:
> cherryd -h
Usage: cherryd [options]
Options:
-h, --help show this help message and exit
-c CONFIG, --config=CONFIG
specify config file(s)
-d run the server as a daemon
-e ENVIRONMENT, --environment=ENVIRONMENT
apply the given config environment
-f start a fastcgi server instead of the default HTTP
server
-s start a scgi server instead of the default HTTP server
-i IMPORTS, --import=IMPORTS
specify modules to import
-p PIDFILE, --pidfile=PIDFILE
store the process id in the given file
Что касается сценария init.d, я думаю, что есть примеры, которые можно найти в Google.
И cherryd
находится в вашем:
virtualenv/lib/python2.7/site-packages/cherrypy/cherryd
или в: https://bitbucket.org/cherrypy/cherrypy/src/default/cherrypy/cherryd
Другие советы
Daemonizer может быть довольно простым в использовании:
# this works for cherrypy 3.1.2 on Ubuntu 10.04
from cherrypy.process.plugins import Daemonizer
# before mounting anything
Daemonizer(cherrypy.engine).subscribe()
cherrypy.tree.mount(MyDaemonApp, "/")
cherrypy.engine.start()
cherrypy.engine.block()
Здесь есть достойное HOWTO по стилю SysV.
Обобщить:
Создайте файл с именем вашего приложения в
/etc/init.d
это вызывает/bin/sh
sudo vim /etc/init.d/MyDaemonApp
#!/bin/sh echo "Invoking MyDaemonApp"; /path/to/MyDaemonApp echo "Started MyDaemonApp. Tremble, Ye Mighty."
Сделайте его исполняемым
sudo chmod +x /etc/init.d/MyDaemonApp
Бегать
update-rc.d
чтобы создать наши правильные ссылки в нужном каталоге времени выполнения.sudo update-rc.d MyDaemonApp defaults 80
sudo /etc/init.d/MyDaemonApp
Я написал учебник/скелет проекта, Cherrypy-webapp-скелет, целью которого было заполнить пробелы в развертывании реального приложения CherryPy на Debian* для веб-разработчика.Он имеет расширенные возможности cherryd
для снижения привилегий демона.Также имеется ряд важных файлов сценариев и конфигурации для init.d
, nginx
, monit
, logrotate
.Учебная часть описывает, как соединить вещи и, в конечном итоге, забудь об этом.Скелетная часть предлагает способ возможного расположения ресурсов проекта веб-приложения CherryPy.
* Он был написан для Squeeze, но практически он должен быть таким же и для Wheezy.
Информация о опциях Daemonizer
При использовании Daemonizer документы не указывайте варианты, например.как перенаправить стандартный вывод или stderr.Из источника демонизатор класс, вы можете найти варианты.В качестве ссылки возьмите этот пример из моего проекта:
# run server as a daemon
d = Daemonizer(cherrypy.engine,
stdout='/home/pi/Gate/log/gate_access.log',
stderr='/home/pi/Gate/log/gate_error.log')
d.subscribe()