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)
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()
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:])
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:])