Exemplo n.º 1
0
    def daemonize(self):
        if self.NO_DAEMONIZE:
            return

        become_daemon(**self.opts)

        atexit.register(self.delpid)
        signal.signal(signal.SIGTERM, self.handle_sigterm)

        # write pidfile
        if not self.NO_WRITE_PID:
            pid = str(os.getpid())
            open(self.pidfile, 'w').write('%s\n' % pid)
Exemplo n.º 2
0
    def daemonize(self):
        if self.NO_DAEMONIZE:
            return

        become_daemon(**self.opts)

        atexit.register(self.delpid)
        signal.signal(signal.SIGTERM, self.handle_sigterm)

        # write pidfile
        if not self.NO_WRITE_PID:
            pid = str(os.getpid())
            open(self.pidfile, 'w').write('%s\n' % pid)
Exemplo n.º 3
0
def runfastcgi(app, argset=[], **kwargs):
    options = FASTCGI_OPTIONS.copy()
    options.update(kwargs)
    for x in argset:
        if '=' in x:
            k, v = x.split('=', 1)
        else:
            k, v = x, True
        options[k.lower()] = v

    if 'help' in options:
        return fastcgi_help()

    if 'run_as' in options:
        from pwd import getpwnam
        try:
            pw = getpwnam(options['run_as'])
        except KeyError:
            pw = None
        if pw:
            os.setresgid(pw.pw_gid, pw.pw_gid, pw.pw_gid)
            os.setresuid(pw.pw_uid, pw.pw_uid, pw.pw_uid)

    try:
        import flup
    except ImportError as e:
        print('ERROR: %s' % e, file=sys.stderr)
        print('  Unable to load the flup package.  In order to run rsted',
              file=sys.stderr)
        print('  as a FastCGI application, you will need to get flup from',
              file=sys.stderr)
        print("  http://www.saddi.com/software/flup/   If you've already",
              file=sys.stderr)
        print(
            '  installed flup, then make sure you have it in your PYTHONPATH.',
            file=sys.stderr)
        return False

    flup_module = 'server.' + options['protocol']

    if options['method'] in ('prefork', 'fork'):
        wsgi_opts = {
            'maxSpare': int(options['maxspare']),
            'minSpare': int(options['minspare']),
            'maxChildren': int(options['maxchildren']),
            'maxRequests': int(options['maxrequests'])
        }
        flup_module += '_fork'
    elif options['method'] in ('thread', 'threaded'):
        wsgi_opts = {
            'maxSpare': int(options['maxspare']),
            'minSpare': int(options['minspare']),
            'maxThreads': int(options['maxchildren'])
        }
    else:
        return fastcgi_help(
            'ERROR: Implementation must be one of prefork or thread.')

    wsgi_opts['debug'] = options['debug'] is not None

    try:
        module = importlib.import_module('flup.%s' % flup_module, 'flup')

        #WSGIServer = module.WSGIServer
        class WSGIServer(module.WSGIServer):
            def _spawnChild(self, sock):
                if not hasattr(self.application, '_unique_id'):
                    self.application._unique_id = 0
                else:
                    self.application._unique_id += 1

                return super(WSGIServer, self)._spawnChild(sock)

    except:
        print("Can't import flup." + flup_module)
        return False

    if options['host'] and options['port'] and not options['socket']:
        wsgi_opts['bindAddress'] = options['host'], int(options['port'])
    elif options['socket'] and not options['host'] and not options['port']:
        wsgi_opts['bindAddress'] = options['socket']
    elif not options['socket'] and not options['host'] and not options['port']:
        wsgi_opts['bindAddress'] = None
    else:
        return fastcgi_help('Invalid combination of host, port, socket.')

    if options['daemonize'] is None:
        # Default to daemonizing if we're running on a socket/named pipe.
        daemonize = wsgi_opts['bindAddress'] is not None
    else:
        if options['daemonize'].lower() in ('true', 'yes', 't'):
            daemonize = True
        elif options['daemonize'].lower() in ('false', 'no', 'f'):
            daemonize = False
        else:
            return fastcgi_help(
                'ERROR: Invalid option for daemonize parameter.')

    daemon_kwargs = {}
    if options['outlog']:
        daemon_kwargs['out_log'] = options['outlog']
    if options['errlog']:
        daemon_kwargs['err_log'] = options['errlog']
    if options['umask']:
        daemon_kwargs['umask'] = int(options['umask'])

    if daemonize:
        from pwl.utils.daemonize import become_daemon
        become_daemon(our_home_dir=options['workdir'], **daemon_kwargs)

    if options['pidfile']:
        fp = open(options['pidfile'], 'w')
        fp.write('%d\n' % os.getpid())
        fp.close()

    # TODO: add middlewares to application
    WSGIServer(app, **wsgi_opts).run()
Exemplo n.º 4
0
            daemonize = True
        elif options['daemonize'].lower() in ('false', 'no', 'f'):
            daemonize = False
        else:
            return fastcgi_help(
                'ERROR: Invalid option for daemonize parameter.')

    daemon_kwargs = {}
    if options['outlog']:
        daemon_kwargs['out_log'] = options['outlog']
    if options['errlog']:
        daemon_kwargs['err_log'] = options['errlog']
    if options['umask']:
        daemon_kwargs['umask'] = int(options['umask'])

    if daemonize:
        from pwl.utils.daemonize import become_daemon
        become_daemon(our_home_dir=options['workdir'], **daemon_kwargs)

    if options['pidfile']:
        fp = open(options['pidfile'], 'w')
        fp.write('%d\n' % os.getpid())
        fp.close()

    # TODO: add middlewares to application
    WSGIServer(app, **wsgi_opts).run()


if __name__ == '__main__':
    runfastcgi(sys.argv[1:])
Exemplo n.º 5
0
            daemonize = True
        elif options['daemonize'].lower() in ('false', 'no', 'f'):
            daemonize = False
        else:
            return fastcgi_help('ERROR: Invalid option for daemonize parameter.')

    daemon_kwargs = {}
    if options['outlog']:
        daemon_kwargs['out_log'] = options['outlog']
    if options['errlog']:
        daemon_kwargs['err_log'] = options['errlog']
    if options['umask']:
        daemon_kwargs['umask'] = int(options['umask'])

    if daemonize:
        from pwl.utils.daemonize import become_daemon
        become_daemon(our_home_dir=options['workdir'], **daemon_kwargs)

    if options['pidfile']:
        fp = open(options['pidfile'], 'w')
        fp.write('%d\n' % os.getpid())
        fp.close()

    # TODO: add middlewares to application
    WSGIServer(app, **wsgi_opts).run()


if __name__ == '__main__':
    runfastcgi(sys.argv[1:])