Подтвердить что ты не робот

Развертывание CherryPy (демон)

Я следил за основным учебником CherryPy (http://www.cherrypy.org/wiki/CherryPyTutorial). Одно, что не обсуждалось, - это развертывание.

Как я могу запустить приложение CherryPy в качестве демона и "забыть об этом"? Что произойдет, если сервер перезагрузится?

Есть ли стандартный рецепт? Возможно, что-то, что создаст сервис script (/etc/init.d/cherrypy...)

Спасибо!

4b9b3361

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