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

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

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

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

Спасибо!


person erikcw    schedule 23.09.2009    source источник


Ответы (4)


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

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

virtualenv / lib / python2.7 / сайты-пакеты / вишневый / вишневый

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

person Benno    schedule 23.09.2009

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.

Обобщить:

  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

person lysdexia    schedule 18.03.2011
comment
Понятия не имею, что такое spizouzou, но переменная совершенно не нужна. Просто скажите: Daemonizer(cherrypy.engine).subscribe(), и плагин сохранится, потому что engine теперь сохраняет ссылку на него. - person Brandon Rhodes; 05.05.2011
comment
@brandon Craig Rhodes прав. Нет необходимости создавать переменную. - person lysdexia; 12.05.2011
comment
tools.cherrypy.org/wiki/WindowsService Как упоминалось в другом месте, можно создать службу Windows с помощью примерно столько же усилий. Обратите внимание на биты регистрации внизу страницы! Они важны. - person lysdexia; 25.05.2011
comment
Изменено, чтобы отразить критику @BrandonRhodes. - person lysdexia; 05.12.2013

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


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

person saaj    schedule 28.06.2014
comment
Код в этом руководстве был действительно полезен, спасибо - person Mauricio De Diana; 11.12.2015

Информация о параметрах Daemonizer

При использовании Daemonizer документы не t указать варианты, например как перенаправить 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()
person chiefenne    schedule 11.11.2017