summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJason R. Coombs <jaraco@jaraco.com>2015-04-24 13:42:11 -0400
committerJason R. Coombs <jaraco@jaraco.com>2015-04-24 13:42:11 -0400
commit5a8338a32446b6e29268241004cac0568994fa58 (patch)
tree1c1aa279662f4464782a8278a90a8be591285901
parent3961bcd44535f37106a25a74d911fe2dac951d98 (diff)
downloadcherrypy-5a8338a32446b6e29268241004cac0568994fa58.tar.gz
Move daemon code to daemon module and invoke from cherryd script
-rwxr-xr-xcherrypy/cherryd111
-rwxr-xr-xcherrypy/daemon.py109
2 files changed, 111 insertions, 109 deletions
diff --git a/cherrypy/cherryd b/cherrypy/cherryd
index fdf2d34e..5d271c39 100755
--- a/cherrypy/cherryd
+++ b/cherrypy/cherryd
@@ -1,113 +1,6 @@
#! /usr/bin/env python
-"""The CherryPy daemon."""
-import sys
-
-import cherrypy
-from cherrypy.process import plugins, servers
-from cherrypy import Application
-
-
-def start(configfiles=None, daemonize=False, environment=None,
- fastcgi=False, scgi=False, pidfile=None, imports=None,
- cgi=False):
- """Subscribe all engine plugins and start the engine."""
- sys.path = [''] + sys.path
- for i in imports or []:
- exec("import %s" % i)
-
- for c in configfiles or []:
- cherrypy.config.update(c)
- # If there's only one app mounted, merge config into it.
- if len(cherrypy.tree.apps) == 1:
- for app in cherrypy.tree.apps.values():
- if isinstance(app, Application):
- app.merge(c)
-
- engine = cherrypy.engine
-
- if environment is not None:
- cherrypy.config.update({'environment': environment})
-
- # Only daemonize if asked to.
- if daemonize:
- # Don't print anything to stdout/sterr.
- cherrypy.config.update({'log.screen': False})
- plugins.Daemonizer(engine).subscribe()
-
- if pidfile:
- plugins.PIDFile(engine, pidfile).subscribe()
-
- if hasattr(engine, "signal_handler"):
- engine.signal_handler.subscribe()
- if hasattr(engine, "console_control_handler"):
- engine.console_control_handler.subscribe()
-
- if (fastcgi and (scgi or cgi)) or (scgi and cgi):
- cherrypy.log.error("You may only specify one of the cgi, fastcgi, and "
- "scgi options.", 'ENGINE')
- sys.exit(1)
- elif fastcgi or scgi or cgi:
- # Turn off autoreload when using *cgi.
- cherrypy.config.update({'engine.autoreload_on': False})
- # Turn off the default HTTP server (which is subscribed by default).
- cherrypy.server.unsubscribe()
-
- addr = cherrypy.server.bind_addr
- if fastcgi:
- f = servers.FlupFCGIServer(application=cherrypy.tree,
- bindAddress=addr)
- elif scgi:
- f = servers.FlupSCGIServer(application=cherrypy.tree,
- bindAddress=addr)
- else:
- f = servers.FlupCGIServer(application=cherrypy.tree,
- bindAddress=addr)
- s = servers.ServerAdapter(engine, httpserver=f, bind_addr=addr)
- s.subscribe()
-
- # Always start the engine; this will start all other services
- try:
- engine.start()
- except:
- # Assume the error has been logged already via bus.log.
- sys.exit(1)
- else:
- engine.block()
-
-
-def run():
- from optparse import OptionParser
-
- p = OptionParser()
- p.add_option('-c', '--config', action="append", dest='config',
- help="specify config file(s)")
- p.add_option('-d', action="store_true", dest='daemonize',
- help="run the server as a daemon")
- p.add_option('-e', '--environment', dest='environment', default=None,
- help="apply the given config environment")
- p.add_option('-f', action="store_true", dest='fastcgi',
- help="start a fastcgi server instead of the default HTTP "
- "server")
- p.add_option('-s', action="store_true", dest='scgi',
- help="start a scgi server instead of the default HTTP server")
- p.add_option('-x', action="store_true", dest='cgi',
- help="start a cgi server instead of the default HTTP server")
- p.add_option('-i', '--import', action="append", dest='imports',
- help="specify modules to import")
- p.add_option('-p', '--pidfile', dest='pidfile', default=None,
- help="store the process id in the given file")
- p.add_option('-P', '--Path', action="append", dest='Path',
- help="add the given paths to sys.path")
- options, args = p.parse_args()
-
- if options.Path:
- for p in options.Path:
- sys.path.insert(0, p)
-
- start(options.config, options.daemonize,
- options.environment, options.fastcgi, options.scgi,
- options.pidfile, options.imports, options.cgi)
+import cherrypy.daemon
if __name__ == '__main__':
- run()
+ cherrypy.daemon.run()
diff --git a/cherrypy/daemon.py b/cherrypy/daemon.py
new file mode 100755
index 00000000..d71e6329
--- /dev/null
+++ b/cherrypy/daemon.py
@@ -0,0 +1,109 @@
+"""The CherryPy daemon."""
+
+import sys
+
+import cherrypy
+from cherrypy.process import plugins, servers
+from cherrypy import Application
+
+
+def start(configfiles=None, daemonize=False, environment=None,
+ fastcgi=False, scgi=False, pidfile=None, imports=None,
+ cgi=False):
+ """Subscribe all engine plugins and start the engine."""
+ sys.path = [''] + sys.path
+ for i in imports or []:
+ exec("import %s" % i)
+
+ for c in configfiles or []:
+ cherrypy.config.update(c)
+ # If there's only one app mounted, merge config into it.
+ if len(cherrypy.tree.apps) == 1:
+ for app in cherrypy.tree.apps.values():
+ if isinstance(app, Application):
+ app.merge(c)
+
+ engine = cherrypy.engine
+
+ if environment is not None:
+ cherrypy.config.update({'environment': environment})
+
+ # Only daemonize if asked to.
+ if daemonize:
+ # Don't print anything to stdout/sterr.
+ cherrypy.config.update({'log.screen': False})
+ plugins.Daemonizer(engine).subscribe()
+
+ if pidfile:
+ plugins.PIDFile(engine, pidfile).subscribe()
+
+ if hasattr(engine, "signal_handler"):
+ engine.signal_handler.subscribe()
+ if hasattr(engine, "console_control_handler"):
+ engine.console_control_handler.subscribe()
+
+ if (fastcgi and (scgi or cgi)) or (scgi and cgi):
+ cherrypy.log.error("You may only specify one of the cgi, fastcgi, and "
+ "scgi options.", 'ENGINE')
+ sys.exit(1)
+ elif fastcgi or scgi or cgi:
+ # Turn off autoreload when using *cgi.
+ cherrypy.config.update({'engine.autoreload_on': False})
+ # Turn off the default HTTP server (which is subscribed by default).
+ cherrypy.server.unsubscribe()
+
+ addr = cherrypy.server.bind_addr
+ if fastcgi:
+ f = servers.FlupFCGIServer(application=cherrypy.tree,
+ bindAddress=addr)
+ elif scgi:
+ f = servers.FlupSCGIServer(application=cherrypy.tree,
+ bindAddress=addr)
+ else:
+ f = servers.FlupCGIServer(application=cherrypy.tree,
+ bindAddress=addr)
+ s = servers.ServerAdapter(engine, httpserver=f, bind_addr=addr)
+ s.subscribe()
+
+ # Always start the engine; this will start all other services
+ try:
+ engine.start()
+ except:
+ # Assume the error has been logged already via bus.log.
+ sys.exit(1)
+ else:
+ engine.block()
+
+
+def run():
+ from optparse import OptionParser
+
+ p = OptionParser()
+ p.add_option('-c', '--config', action="append", dest='config',
+ help="specify config file(s)")
+ p.add_option('-d', action="store_true", dest='daemonize',
+ help="run the server as a daemon")
+ p.add_option('-e', '--environment', dest='environment', default=None,
+ help="apply the given config environment")
+ p.add_option('-f', action="store_true", dest='fastcgi',
+ help="start a fastcgi server instead of the default HTTP "
+ "server")
+ p.add_option('-s', action="store_true", dest='scgi',
+ help="start a scgi server instead of the default HTTP server")
+ p.add_option('-x', action="store_true", dest='cgi',
+ help="start a cgi server instead of the default HTTP server")
+ p.add_option('-i', '--import', action="append", dest='imports',
+ help="specify modules to import")
+ p.add_option('-p', '--pidfile', dest='pidfile', default=None,
+ help="store the process id in the given file")
+ p.add_option('-P', '--Path', action="append", dest='Path',
+ help="add the given paths to sys.path")
+ options, args = p.parse_args()
+
+ if options.Path:
+ for p in options.Path:
+ sys.path.insert(0, p)
+
+ start(options.config, options.daemonize,
+ options.environment, options.fastcgi, options.scgi,
+ options.pidfile, options.imports, options.cgi)