Deploying CherryPy (daemon)

erikcw picture erikcw · Sep 23, 2009 · Viewed 13k times · Source

I've followed the basic CherryPy tutorial (http://www.cherrypy.org/wiki/CherryPyTutorial). One thing not discussed is deployment.

How can I launch a CherryPy app as a daemon and "forget about it"? What happens if the server reboots?

Is there a standard recipe? Maybe something that will create a service script (/etc/init.d/cherrypy...)

Thanks!

Answer

lysdexia picture lysdexia · Mar 18, 2011

Daemonizer can be pretty simple to use:

# 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.

To summarize:

  1. Create a file named for your application in /etc/init.d that calls /bin/sh

    sudo vim /etc/init.d/MyDaemonApp

    #!/bin/sh  
    echo "Invoking MyDaemonApp";  
    /path/to/MyDaemonApp  
    echo "Started MyDaemonApp. Tremble, Ye Mighty."  
    
  2. Make it executable

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

  3. Run update-rc.d to create our proper links in the proper runtime dir.

    sudo update-rc.d MyDaemonApp defaults 80

  4. sudo /etc/init.d/MyDaemonApp