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'),
|
help='set the background PID FILE'),
|
||||||
op.make_option('-D', '--daemon', dest='daemon', action="store_true",
|
op.make_option('-D', '--daemon', dest='daemon', action="store_true",
|
||||||
help='Run daemonized in the background.'),
|
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',
|
op.make_option('--log-level', dest='loglevel', default='info',
|
||||||
help='Log level below which to silence messages. [%default]'),
|
help='Log level below which to silence messages. [%default]'),
|
||||||
op.make_option('--log-file', dest='logfile', 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"))
|
h.setFormatter(logging.Formatter("%(asctime)s - %(levelname)s %(message)s"))
|
||||||
logger.addHandler(h)
|
logger.addHandler(h)
|
||||||
|
|
||||||
def daemonize():
|
def daemonize(umask):
|
||||||
if not 'GUNICORN_FD' in os.environ:
|
if not 'GUNICORN_FD' in os.environ:
|
||||||
if os.fork() == 0:
|
if os.fork() == 0:
|
||||||
os.setsid()
|
os.setsid()
|
||||||
if os.fork() == 0:
|
if os.fork() == 0:
|
||||||
os.umask(UMASK)
|
os.umask(umask)
|
||||||
else:
|
else:
|
||||||
os._exit(0)
|
os._exit(0)
|
||||||
else:
|
else:
|
||||||
@ -106,7 +108,9 @@ def main(usage, get_app):
|
|||||||
host = bind
|
host = bind
|
||||||
port = 8000
|
port = 8000
|
||||||
addr = (host, port)
|
addr = (host, port)
|
||||||
|
|
||||||
|
umask = int(opts.umask or UMASK)
|
||||||
|
|
||||||
kwargs = dict(
|
kwargs = dict(
|
||||||
debug=opts.debug,
|
debug=opts.debug,
|
||||||
pidfile=opts.pidfile
|
pidfile=opts.pidfile
|
||||||
@ -114,7 +118,7 @@ def main(usage, get_app):
|
|||||||
|
|
||||||
arbiter = Arbiter(addr, workers, app, **kwargs)
|
arbiter = Arbiter(addr, workers, app, **kwargs)
|
||||||
if opts.daemon:
|
if opts.daemon:
|
||||||
daemonize()
|
daemonize(umask)
|
||||||
else:
|
else:
|
||||||
os.setpgrp()
|
os.setpgrp()
|
||||||
configure_logging(opts)
|
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")
|
daemon = kwargs.get("daemon")
|
||||||
if global_conf:
|
if global_conf:
|
||||||
daemon = global_conf.get('daemon', daemonize)
|
daemon = global_conf.get('daemon', daemonize)
|
||||||
|
|
||||||
|
umask = kwgars.get('umask', UMASK)
|
||||||
|
if global_conf:
|
||||||
|
umask = global_conf.get('umask', umask)
|
||||||
|
|
||||||
kwargs = dict(
|
kwargs = dict(
|
||||||
debug=debug,
|
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)
|
arbiter = Arbiter(bind_addr, workers, app, **kwargs)
|
||||||
if daemon == "true":
|
if daemon == "true":
|
||||||
daemonize()
|
daemonize(umask)
|
||||||
else:
|
else:
|
||||||
os.setpgrp()
|
os.setpgrp()
|
||||||
arbiter.run()
|
arbiter.run()
|
||||||
@ -246,6 +254,9 @@ def run_paster():
|
|||||||
workers = opts.workers
|
workers = opts.workers
|
||||||
else:
|
else:
|
||||||
workers = int(ctx.local_conf.get('workers', 1))
|
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:
|
if not opts.bind:
|
||||||
host = ctx.local_conf.get('host')
|
host = ctx.local_conf.get('host')
|
||||||
@ -268,4 +279,4 @@ def run_paster():
|
|||||||
return app
|
return app
|
||||||
|
|
||||||
main("%prog [OPTIONS] pasteconfig.ini", get_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 django.core.handlers.wsgi import WSGIHandler
|
||||||
|
|
||||||
from gunicorn.arbiter import Arbiter
|
from gunicorn.arbiter import Arbiter
|
||||||
from gunicorn.main import daemonize
|
from gunicorn.main import daemonize, UMASK
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
option_list = BaseCommand.option_list + (
|
option_list = BaseCommand.option_list + (
|
||||||
@ -28,6 +28,8 @@ class Command(BaseCommand):
|
|||||||
help='set the background PID file'),
|
help='set the background PID file'),
|
||||||
make_option( '--daemon', dest='daemon', action="store_true",
|
make_option( '--daemon', dest='daemon', action="store_true",
|
||||||
help='Run daemonized in the background.'),
|
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."
|
help = "Starts a fully-functional Web server using gunicorn."
|
||||||
args = '[optional port number, or ipaddr:port or unix:/path/to/sockfile]'
|
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'))
|
workers = int(options.get('workers', '1'))
|
||||||
daemon = options.get('daemon')
|
daemon = options.get('daemon')
|
||||||
quit_command = (sys.platform == 'win32') and 'CTRL-BREAK' or 'CONTROL-C'
|
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..."
|
print "Validating models..."
|
||||||
self.validate(display_num_errors=True)
|
self.validate(display_num_errors=True)
|
||||||
print "\nDjango version %s, using settings %r" % (django.get_version(), settings.SETTINGS_MODULE)
|
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,
|
arbiter = Arbiter(addr, workers, handler,
|
||||||
pidfile=pidfile)
|
pidfile=pidfile)
|
||||||
if daemon:
|
if daemon:
|
||||||
daemonize()
|
daemonize(umask)
|
||||||
arbiter.run()
|
arbiter.run()
|
||||||
except WSGIServerException, e:
|
except WSGIServerException, e:
|
||||||
# Use helpful error messages instead of ugly tracebacks.
|
# Use helpful error messages instead of ugly tracebacks.
|
||||||
@ -91,4 +94,4 @@ class Command(BaseCommand):
|
|||||||
except (AttributeError, KeyError):
|
except (AttributeError, KeyError):
|
||||||
error_text = str(e)
|
error_text = str(e)
|
||||||
sys.stderr.write(self.style.ERROR("Error: %s" % error_text) + '\n')
|
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