2009-09-23 2 views
23

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

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

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

Спасибо!

ответ

14

Существует Daemonizer плагин для 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. Я думаю, что есть примеры, которые могут быть Googled.

И cherryd находится в вашем:

virtualenv/Библиотека/python2.7/сайт-пакеты/CherryPy/cherryd

или: https://bitbucket.org/cherrypy/cherrypy/src/default/cherrypy/cherryd

15

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

There is a decent HOWTO for SysV style here.

Резюмируя:

  1. Создайте файл с именем вашего приложения в /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." 
    
  2. сделать его исполняемым

    sudo chmod +x /etc/init.d/MyDaemonApp

  3. Запустите update-rc.d, чтобы создать наши правильные ссылки в правильном реестре.

    sudo update-rc.d MyDaemonApp defaults 80

  4. sudo /etc/init.d/MyDaemonApp

+2

Я понятия не имею, что такое 'spizouzou', но переменная совершенно не нужна. Просто скажите: 'Daemonizer (cherrypy.engine) .subscribe()' и плагин будет сохраняться, потому что 'engine' теперь сохраняет ссылку на него вживую. –

+0

@brandon craig rhodes является правильным. Нет необходимости создавать переменную. – lysdexia

+3

http://tools.cherrypy.org/wiki/WindowsService Как уже упоминалось в другом месте, можно создать службу Windows примерно с таким же объемом усилий. Обратите внимание на регистрационные биты в нижней части страницы! Они важны. – lysdexia

5

Я написал скелет учебник/проекта, cherrypy-webapp-skeleton, целью которого было заполнить пробелы для развертывания в реальном мире приложение CherryPy на Debian * для web- разработчик. Он имеет расширенные cherryd для снижения привилегий демона. Существует также ряд важных сценариев и файлов конфигурации для init.d, nginx, monit, logrotate. В учебном пособии описывается, как соединить вещи и в конечном итоге забудьте об этом. Скелетная часть предлагает способ возможной компоновки активов проекта CherryPy webapp.


* Это было написано для Squeeze, но практически это должно быть одинаково для Wheezy.

+0

Код в этом учебнике был действительно полезен, спасибо –

1

Информация о вариантах 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() 
Смежные вопросы