Развертывание CherryPy (демон)
Я следил за основным учебником CherryPy (http://www.cherrypy.org/wiki/CherryPyTutorial). Одно, что не обсуждалось, - это развертывание.
Как я могу запустить приложение CherryPy в качестве демона и "забыть об этом"? Что произойдет, если сервер перезагрузится?
Есть ли стандартный рецепт? Возможно, что-то, что создаст сервис script (/etc/init.d/cherrypy...)
Спасибо!
Ответы
Ответ 1
Существует плагин Daemonizer для включенного CherryPy, который полезен для его запуска, но, безусловно, самый простой способ для простого случаях следует использовать вишневый script:
> 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 script, я думаю, что есть примеры, которые могут быть Googled.
И cherryd
находится в вашем:
virtualenv/Library/python2.7/сайт-пакеты/CherryPy/cherryd
или in: https://bitbucket.org/cherrypy/cherrypy/src/default/cherrypy/cherryd
Ответ 2
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
Ответ 3
Я написал скелет учебника/проекта cherrypy-webapp-skeleton, целью которого было заполнить пробелы для развертывания реального приложения CherryPy на Debian * для веб-разработчика. Он имеет расширенный cherryd
для снижения привилегий демона. Также существует ряд важных script и конфигурационных файлов для init.d
, nginx
, monit
, logrotate
. В части учебника описывается, как соединить вещи и, в конце концов, забыть об этом. Скелетная часть предлагает способ возможной компоновки активов проекта CherryPy webapp.
* Это было написано для Squeeze, но практически это должно быть одинаково для Wheezy.
Ответ 4
Информация о параметрах Daemonizer
При использовании Daemonizer docs не указывать параметры, например. как перенаправить stdout или stderr. Из источника Daemonizer вы можете найти варианты. В качестве ссылки возьмите этот пример из моего проекта:
# 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()