部署 CherryPy(守护进程)

问题描述 投票:0回答:4

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

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

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

谢谢!

python deployment cherrypy
4个回答
19
投票

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

这里有一个不错的 SysV 风格的 HOWTO。

总结一下:

  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


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/site-packages/cherrypy/cherryd

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


5
投票

我编写了一个教程/项目框架,cherrypy-webapp-sculpture,其目标是填补 Web 开发人员在 Debian* 上部署真实 CherryPy 应用程序的空白。它具有扩展的

cherryd
功能,用于守护进程权限下降。还有许多重要的脚本和配置文件
init.d
nginx
monit
logrotate
。教程部分描述了如何将东西组合在一起并最终忘记它。骨架部分提出了 CherryPy webapp 项目资产的一种可能的排列方式。


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


1
投票

有关守护程序选项的信息

使用 Daemonizer 时,docs 没有说明选项,例如如何重定向 stdoutstderr。从 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()
© www.soinside.com 2019 - 2024. All rights reserved.