mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
add umask option
This commit is contained in:
parent
2d760e492d
commit
07d252eb4d
@ -34,6 +34,8 @@ def options():
|
||||
help='set the background PID FILE'),
|
||||
op.make_option('-D', '--daemon', dest='daemon', action="store_true",
|
||||
help='Run daemonized in the background.'),
|
||||
op.make_option('-m', '--umask', dest="umask", type='int',
|
||||
help="Define umask of daemon process"),
|
||||
op.make_option('--log-level', dest='loglevel', default='info',
|
||||
help='Log level below which to silence messages. [%default]'),
|
||||
op.make_option('--log-file', dest='logfile', default='-',
|
||||
@ -57,12 +59,12 @@ def configure_logging(opts):
|
||||
h.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s %(message)s"))
|
||||
logger.addHandler(h)
|
||||
|
||||
def daemonize():
|
||||
def daemonize(umask):
|
||||
if not 'GUNICORN_FD' in os.environ:
|
||||
if os.fork() == 0:
|
||||
os.setsid()
|
||||
if os.fork() == 0:
|
||||
os.umask(UMASK)
|
||||
os.umask(umask)
|
||||
else:
|
||||
os._exit(0)
|
||||
else:
|
||||
@ -106,7 +108,9 @@ def main(usage, get_app):
|
||||
host = bind
|
||||
port = 8000
|
||||
addr = (host, port)
|
||||
|
||||
|
||||
umask = int(opts.umask or UMASK)
|
||||
|
||||
kwargs = dict(
|
||||
debug=opts.debug,
|
||||
pidfile=opts.pidfile
|
||||
@ -114,7 +118,7 @@ def main(usage, get_app):
|
||||
|
||||
arbiter = Arbiter(addr, workers, app, **kwargs)
|
||||
if opts.daemon:
|
||||
daemonize()
|
||||
daemonize(umask)
|
||||
else:
|
||||
os.setpgrp()
|
||||
configure_logging(opts)
|
||||
@ -145,6 +149,10 @@ def paste_server(app, global_conf=None, host="127.0.0.1", port=None,
|
||||
daemon = kwargs.get("daemon")
|
||||
if global_conf:
|
||||
daemon = global_conf.get('daemon', daemonize)
|
||||
|
||||
umask = kwgars.get('umask', UMASK)
|
||||
if global_conf:
|
||||
umask = global_conf.get('umask', umask)
|
||||
|
||||
kwargs = dict(
|
||||
debug=debug,
|
||||
@ -153,7 +161,7 @@ def paste_server(app, global_conf=None, host="127.0.0.1", port=None,
|
||||
|
||||
arbiter = Arbiter(bind_addr, workers, app, **kwargs)
|
||||
if daemon == "true":
|
||||
daemonize()
|
||||
daemonize(umask)
|
||||
else:
|
||||
os.setpgrp()
|
||||
arbiter.run()
|
||||
@ -246,6 +254,9 @@ def run_paster():
|
||||
workers = opts.workers
|
||||
else:
|
||||
workers = int(ctx.local_conf.get('workers', 1))
|
||||
|
||||
if not opts.umask:
|
||||
opts.umask = int(ctx.local_conf.get('umask', UMASK))
|
||||
|
||||
if not opts.bind:
|
||||
host = ctx.local_conf.get('host')
|
||||
@ -268,4 +279,4 @@ def run_paster():
|
||||
return app
|
||||
|
||||
main("%prog [OPTIONS] pasteconfig.ini", get_app)
|
||||
|
||||
|
||||
|
||||
@ -16,7 +16,7 @@ from django.core.servers.basehttp import AdminMediaHandler, WSGIServerException
|
||||
from django.core.handlers.wsgi import WSGIHandler
|
||||
|
||||
from gunicorn.arbiter import Arbiter
|
||||
from gunicorn.main import daemonize
|
||||
from gunicorn.main import daemonize, UMASK
|
||||
|
||||
class Command(BaseCommand):
|
||||
option_list = BaseCommand.option_list + (
|
||||
@ -28,6 +28,8 @@ class Command(BaseCommand):
|
||||
help='set the background PID file'),
|
||||
make_option( '--daemon', dest='daemon', action="store_true",
|
||||
help='Run daemonized in the background.'),
|
||||
make_option('--umask', dest='umask', type='int',
|
||||
help="Define umask of daemon process"),
|
||||
)
|
||||
help = "Starts a fully-functional Web server using gunicorn."
|
||||
args = '[optional port number, or ipaddr:port or unix:/path/to/sockfile]'
|
||||
@ -57,8 +59,9 @@ class Command(BaseCommand):
|
||||
workers = int(options.get('workers', '1'))
|
||||
daemon = options.get('daemon')
|
||||
quit_command = (sys.platform == 'win32') and 'CTRL-BREAK' or 'CONTROL-C'
|
||||
pidfile = options.get('pidfile') or None
|
||||
|
||||
pidfile = options.get('pidfile', None)
|
||||
umask = options.get('umask', UMASK)
|
||||
|
||||
print "Validating models..."
|
||||
self.validate(display_num_errors=True)
|
||||
print "\nDjango version %s, using settings %r" % (django.get_version(), settings.SETTINGS_MODULE)
|
||||
@ -77,7 +80,7 @@ class Command(BaseCommand):
|
||||
arbiter = Arbiter(addr, workers, handler,
|
||||
pidfile=pidfile)
|
||||
if daemon:
|
||||
daemonize()
|
||||
daemonize(umask)
|
||||
arbiter.run()
|
||||
except WSGIServerException, e:
|
||||
# Use helpful error messages instead of ugly tracebacks.
|
||||
@ -91,4 +94,4 @@ class Command(BaseCommand):
|
||||
except (AttributeError, KeyError):
|
||||
error_text = str(e)
|
||||
sys.stderr.write(self.style.ERROR("Error: %s" % error_text) + '\n')
|
||||
sys.exit(1)
|
||||
sys.exit(1)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user