部署CherryPy(守护进程)

时间:2009-09-23 01:27:13

标签: python deployment cherrypy

我遵循了基本的CherryPy教程(http://www.cherrypy.org/wiki/CherryPyTutorial)。没有讨论的一件事是部署。

如何将CherryPy应用程序作为守护程序启动并“忘掉它”?如果服务器重新启动会发生什么?

有标准食谱吗?也许会创建一个服务脚本(/etc/init.d/cherrypy ...)

谢谢!

4 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:14)

默认情况下,CherryPy包含一个Daemonizer插件,这对于启动它很有用,但到目前为止,简单案例的最简单方法是使用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 /站点包/ CherryPy的/ cherryd

或在:https://bitbucket.org/cherrypy/cherrypy/src/default/cherrypy/cherryd

答案 2 :(得分:5)

我编写了一个教程/项目框架cherrypy-webapp-skeleton,其目标是填补在Debian *上为Web开发人员部署真实的CherryPy应用程序的空白。它为守护程序权限下降提供了扩展cherryd。还有init.dnginxmonitlogrotate的许多重要脚本和配置文件。教程部分描述了如何将事物放在一起并最终忘记它。骨架部分提出了一种可能安排CherryPy webapp项目资产的方法。


*它是为Squeeze编写的,但实际上它应该与Wheezy相同。

答案 3 :(得分: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()