Esempio n. 1
0
File: core.py Progetto: ac0ra/ajenti
def run():
    ajenti.init()

    reload(sys)
    sys.setdefaultencoding('utf8')

    try:
        locale.setlocale(locale.LC_ALL, '')
    except:
        logging.warning('Couldn\'t set default locale')

    logging.info('Ajenti %s running on platform: %s' % (ajenti.version, ajenti.platform))

    if ajenti.debug:
        def cmd_list_instances(ctx=None):
            import pprint
            if not ctx:
                from ajenti.plugins import manager
                ctx = manager.context
            pprint.pprint(ctx._get_all_instances())

        def cmd_sessions():
            import pprint
            sessions = SessionMiddleware.get().sessions
            return sessions

        def cmd_list_instances_session():
            cmd_list_instances(cmd_sessions().values()[0].appcontext)

        exconsole.register(commands=[
            ('_manager', 'PluginManager', ajenti.plugins.manager),
            ('_instances', 'return all @plugin instances', cmd_list_instances),
            ('_sessions', 'return all Sessions', cmd_sessions),
            ('_instances_session', 'return all @plugin instances in session #0', cmd_list_instances_session),
        ])

    # Load plugins
    ajenti.plugins.manager.load_all()
    Inflater.get().precache()

    bind_spec = (ajenti.config.tree.http_binding.host, ajenti.config.tree.http_binding.port)
    if ':' in bind_spec[0]:
        addrs = socket.getaddrinfo(bind_spec[0], bind_spec[1], socket.AF_INET6, 0, socket.SOL_TCP)
        bind_spec = addrs[0][-1]

    # Fix stupid socketio bug (it tries to do *args[0][0])
    socket.socket.__getitem__ = lambda x, y: None

    logging.info('Starting server on %s' % (bind_spec, ))
    if bind_spec[0].startswith('/'):
        if os.path.exists(bind_spec[0]):
            os.unlink(bind_spec[0])
        listener = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        try:
            listener.bind(bind_spec[0])
        except:
            logging.error('Could not bind to %s' % bind_spec[0])
            sys.exit(1)
        listener.listen(10)
    else:
        listener = socket.socket(socket.AF_INET6 if ':' in bind_spec[0] else socket.AF_INET, socket.SOCK_STREAM)
        try:
            listener.setsockopt(socket.IPPROTO_TCP, socket.TCP_CORK, 1)
        except:
            try:
                socket.TCP_NOPUSH = 4
                listener.setsockopt(socket.IPPROTO_TCP, socket.TCP_NOPUSH, 1)
            except:
                logging.warn('Could not set TCP_CORK/TCP_NOPUSH')
        listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        try:
            listener.bind(bind_spec)
        except:
            logging.error('Could not bind to %s' % (bind_spec,))
            sys.exit(1)
        listener.listen(10)

    stack = [
        SessionMiddleware.get(),
        AuthenticationMiddleware.get(),
        CentralDispatcher.get()
    ]

    ssl_args = {}
    if ajenti.config.tree.ssl.enable:
        ssl_args['certfile'] = ajenti.config.tree.ssl.certificate_path

    ajenti.server = SocketIOServer(
        listener,
        log=open(os.devnull, 'w'),
        application=HttpRoot(stack).dispatch,
        policy_server=False,
        resource='ajenti:socket',
        transports=[
            str('websocket'),
            str('flashsocket'),
            str('xhr-polling'),
            str('jsonp-polling'),
        ],
        **ssl_args
    )

    # auth.log
    try:
        syslog.openlog(
            ident=str(b'ajenti'),
            facility=syslog.LOG_AUTH,
        )
    except:
        syslog.openlog(b'ajenti')

    try:
        gevent.signal(signal.SIGINT, lambda: sys.exit(0))
        gevent.signal(signal.SIGTERM, lambda: sys.exit(0))
    except:
        pass

    ajenti.feedback.start()
    ajenti.ipc.IPCServer.get().start()
    ajenti.licensing.Licensing.get()

    ajenti.server.serve_forever()

    if hasattr(ajenti.server, 'restart_marker'):
        logging.warn('Restarting by request')

        fd = 20  # Close all descriptors. Creepy thing
        while fd > 2:
            try:
                os.close(fd)
                logging.debug('Closed descriptor #%i' % fd)
            except:
                pass
            fd -= 1

        os.execv(sys.argv[0], sys.argv)
    else:
        logging.info('Stopped by request')
Esempio n. 2
0
def run():
    ajenti.init()

    reload(sys)
    sys.setdefaultencoding("utf8")

    try:
        locale.setlocale(locale.LC_ALL, "")
    except:
        logging.warning("Couldn't set default locale")

    logging.info("Ajenti %s running on platform: %s" % (ajenti.version, ajenti.platform))
    if not ajenti.platform in ["debian", "centos", "freebsd"]:
        logging.warn("%s is not officially supported!" % ajenti.platform)

    if ajenti.debug:

        def cmd_list_instances(ctx=None):
            import pprint

            if not ctx:
                from ajenti.plugins import manager

                ctx = manager.context
            pprint.pprint(ctx._get_all_instances())

        def cmd_sessions():
            import pprint

            sessions = SessionMiddleware.get().sessions
            return sessions

        def cmd_list_instances_session():
            cmd_list_instances(cmd_sessions().values()[0].appcontext)

        exconsole.register(
            commands=[
                ("_manager", "PluginManager", ajenti.plugins.manager),
                ("_instances", "return all @plugin instances", cmd_list_instances),
                ("_sessions", "return all Sessions", cmd_sessions),
                ("_instances_session", "return all @plugin instances in session #0", cmd_list_instances_session),
            ]
        )

    # Load plugins
    ajenti.plugins.manager.load_all()
    Inflater.get().precache()

    bind_spec = (ajenti.config.tree.http_binding.host, ajenti.config.tree.http_binding.port)
    if ":" in bind_spec[0]:
        addrs = socket.getaddrinfo(bind_spec[0], bind_spec[1], socket.AF_INET6, 0, socket.SOL_TCP)
        bind_spec = addrs[0][-1]

    # Fix stupid socketio bug (it tries to do *args[0][0])
    socket.socket.__getitem__ = lambda x, y: None

    logging.info("Starting server on %s" % (bind_spec,))
    if bind_spec[0].startswith("/"):
        if os.path.exists(bind_spec[0]):
            os.unlink(bind_spec[0])
        listener = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        try:
            listener.bind(bind_spec[0])
        except:
            logging.error("Could not bind to %s" % bind_spec[0])
            sys.exit(1)
        listener.listen(10)
    else:
        listener = socket.socket(socket.AF_INET6 if ":" in bind_spec[0] else socket.AF_INET, socket.SOCK_STREAM)
        if not ajenti.platform in ["freebsd", "osx"]:
            try:
                listener.setsockopt(socket.IPPROTO_TCP, socket.TCP_CORK, 1)
            except:
                logging.warn("Could not set TCP_CORK")
        listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        try:
            listener.bind(bind_spec)
        except:
            logging.error("Could not bind to %s" % (bind_spec,))
            sys.exit(1)
        listener.listen(10)

    stack = [SessionMiddleware.get(), AuthenticationMiddleware.get(), CentralDispatcher.get()]

    ssl_args = {}
    if ajenti.config.tree.ssl.enable:
        ssl_args["certfile"] = ajenti.config.tree.ssl.certificate_path
        logging.info("SSL enabled: %s" % ssl_args["certfile"])

    ajenti.server = SocketIOServer(
        listener,
        log=open(os.devnull, "w"),
        application=HttpRoot(stack).dispatch,
        policy_server=False,
        handler_class=RootHttpHandler,
        resource="ajenti:socket",
        transports=[str("websocket"), str("flashsocket"), str("xhr-polling"), str("jsonp-polling")],
        **ssl_args
    )

    # auth.log
    try:
        syslog.openlog(ident=str(b"ajenti"), facility=syslog.LOG_AUTH)
    except:
        syslog.openlog(b"ajenti")

    try:
        gevent.signal(signal.SIGINT, lambda: sys.exit(0))
        gevent.signal(signal.SIGTERM, lambda: sys.exit(0))
    except:
        pass

    ajenti.feedback.start()
    ajenti.ipc.IPCServer.get().start()
    ajenti.licensing.Licensing.get()

    ajenti.server.serve_forever()

    if hasattr(ajenti.server, "restart_marker"):
        logging.warn("Restarting by request")

        fd = 20  # Close all descriptors. Creepy thing
        while fd > 2:
            try:
                os.close(fd)
                logging.debug("Closed descriptor #%i" % fd)
            except:
                pass
            fd -= 1

        os.execv(sys.argv[0], sys.argv)
    else:
        logging.info("Stopped by request")
Esempio n. 3
0
def run():
    ajenti.init()

    reload(sys)
    sys.setdefaultencoding('utf8')

    try:
        locale.setlocale(locale.LC_ALL, '')
    except:
        logging.warning('Couldn\'t set default locale')

    logging.info('Ajenti %s running on platform: %s' %
                 (ajenti.version, ajenti.platform))
    if not ajenti.platform in ['debian', 'centos', 'freebsd', 'mageia']:
        logging.warn('%s is not officially supported!' % ajenti.platform)

    if ajenti.debug:

        def cmd_list_instances(ctx=None):
            import pprint
            if not ctx:
                from ajenti.plugins import manager
                ctx = manager.context
            pprint.pprint(ctx._get_all_instances())

        def cmd_sessions():
            import pprint
            sessions = SessionMiddleware.get().sessions
            return sessions

        def cmd_list_instances_session():
            cmd_list_instances(cmd_sessions().values()[0].appcontext)

        exconsole.register(commands=[
            ('_manager', 'PluginManager', ajenti.plugins.manager),
            ('_instances', 'return all @plugin instances', cmd_list_instances),
            ('_sessions', 'return all Sessions', cmd_sessions),
            ('_instances_session',
             'return all @plugin instances in session #0',
             cmd_list_instances_session),
        ])

    # Load plugins
    ajenti.plugins.manager.load_all()
    Inflater.get().precache()

    bind_spec = (ajenti.config.tree.http_binding.host,
                 ajenti.config.tree.http_binding.port)
    if ':' in bind_spec[0]:
        addrs = socket.getaddrinfo(bind_spec[0], bind_spec[1], socket.AF_INET6,
                                   0, socket.SOL_TCP)
        bind_spec = addrs[0][-1]

    # Fix stupid socketio bug (it tries to do *args[0][0])
    socket.socket.__getitem__ = lambda x, y: None

    logging.info('Starting server on %s' % (bind_spec, ))
    if bind_spec[0].startswith('/'):
        if os.path.exists(bind_spec[0]):
            os.unlink(bind_spec[0])
        listener = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        try:
            listener.bind(bind_spec[0])
        except:
            logging.error('Could not bind to %s' % bind_spec[0])
            sys.exit(1)
        listener.listen(10)
    else:
        listener = socket.socket(
            socket.AF_INET6 if ':' in bind_spec[0] else socket.AF_INET,
            socket.SOCK_STREAM)
        if not ajenti.platform in ['freebsd', 'osx']:
            try:
                listener.setsockopt(socket.IPPROTO_TCP, socket.TCP_CORK, 1)
            except:
                logging.warn('Could not set TCP_CORK')
        listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        try:
            listener.bind(bind_spec)
        except:
            logging.error('Could not bind to %s' % (bind_spec, ))
            sys.exit(1)
        listener.listen(10)

    stack = [
        SessionMiddleware.get(),
        AuthenticationMiddleware.get(),
        CentralDispatcher.get()
    ]

    ssl_args = {}
    if ajenti.config.tree.ssl.enable:
        ssl_args['certfile'] = ajenti.config.tree.ssl.certificate_path
        ssl_args['ssl_version'] = gevent.ssl.PROTOCOL_TLSv1
        logging.info('SSL enabled: %s' % ssl_args['certfile'])

    ajenti.server = SocketIOServer(listener,
                                   log=open(os.devnull, 'w'),
                                   application=HttpRoot(stack).dispatch,
                                   policy_server=False,
                                   handler_class=RootHttpHandler,
                                   resource='ajenti:socket',
                                   transports=[
                                       str('websocket'),
                                       str('flashsocket'),
                                       str('xhr-polling'),
                                       str('jsonp-polling'),
                                   ],
                                   **ssl_args)

    # auth.log
    try:
        syslog.openlog(
            ident=str(b'ajenti'),
            facility=syslog.LOG_AUTH,
        )
    except:
        syslog.openlog(b'ajenti')

    try:
        gevent.signal(signal.SIGINT, lambda: sys.exit(0))
        gevent.signal(signal.SIGTERM, lambda: sys.exit(0))
    except:
        pass

    ajenti.feedback.start()
    ajenti.ipc.IPCServer.get().start()
    ajenti.licensing.Licensing.get()

    ajenti.server.serve_forever()

    if hasattr(ajenti.server, 'restart_marker'):
        logging.warn('Restarting by request')

        fd = 20  # Close all descriptors. Creepy thing
        while fd > 2:
            try:
                os.close(fd)
                logging.debug('Closed descriptor #%i' % fd)
            except:
                pass
            fd -= 1

        os.execv(sys.argv[0], sys.argv)
    else:
        logging.info('Stopped by request')
Esempio n. 4
0
File: core.py Progetto: quyvn/ajenti
def run():
    reload(sys)
    sys.setdefaultencoding("utf8")

    try:
        locale.setlocale(locale.LC_ALL, "")
    except:
        logging.warning("Couldn't set default locale")
    localedir = os.path.abspath(os.path.join(os.path.split(ajenti.core.__file__)[0], "locale"))
    gettext.textdomain("ajenti")
    gettext.install("ajenti", localedir, unicode=True)

    logging.info("Ajenti %s running on platform: %s" % (ajenti.version, ajenti.platform))

    if ajenti.debug:
        exconsole.register()

    # Load plugins
    ajenti.plugins.manager.load_all()

    bind_spec = (ajenti.config.tree.http_binding.host, ajenti.config.tree.http_binding.port)
    if ":" in bind_spec[0]:
        addrs = socket.getaddrinfo(bind_spec[0], bind_spec[1], socket.AF_INET6, 0, socket.SOL_TCP)
        bind_spec = addrs[0][-1]

    ssl_tunnel = None
    if not bind_spec[0].startswith("/"):
        if ajenti.config.tree.ssl.enable:
            ssl_tunnel = SSLTunnel()
            ssl_tunnel.start(bind_spec[0], bind_spec[1], ajenti.config.tree.ssl.certificate_path)
            if ssl_tunnel.check():
                logging.info("SSL tunnel running fine")
                bind_spec = ("127.0.0.1", ssl_tunnel.port)
                atexit.register(ssl_tunnel.stop)
            else:
                logging.error("SSL tunnel failed to start")

    # Fix stupid socketio bug (it tries to do *args[0][0])
    socket.socket.__getitem__ = lambda x, y: None

    logging.info("Starting server on %s" % (bind_spec,))
    if bind_spec[0].startswith("/"):
        if os.path.exists(bind_spec[0]):
            os.unlink(bind_spec[0])
        listener = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        try:
            listener.bind(bind_spec[0])
        except:
            logging.error("Could not bind to %s" % bind_spec[0])
            sys.exit(1)
        listener.listen(10)
    else:
        listener = socket.socket(socket.AF_INET6 if ":" in bind_spec[0] else socket.AF_INET, socket.SOCK_STREAM)
        listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        try:
            listener.bind(bind_spec)
        except:
            logging.error("Could not bind to %s" % (bind_spec,))
            sys.exit(1)
        listener.listen(10)

    stack = [SessionMiddleware(), AuthenticationMiddleware(), CentralDispatcher()]
    ajenti.server = SocketIOServer(
        listener,
        log=open(os.devnull, "w"),
        application=HttpRoot(stack).dispatch,
        policy_server=False,
        resource="ajenti:socket",
    )

    # auth.log
    try:
        syslog.openlog(ident=str(b"ajenti"), facility=syslog.LOG_AUTH)
    except:
        syslog.openlog(b"ajenti")

    try:
        gevent.signal(signal.SIGTERM, lambda: sys.exit(0))
    except:
        pass

    ajenti.feedback.start()
    ajenti.ipc.IPCServer.get(manager.context).start()

    Inflater.get(manager.context).precache()
    ajenti.server.serve_forever()

    if hasattr(ajenti.server, "restart_marker"):
        logging.warn("Restarting by request")
        if ssl_tunnel:
            ssl_tunnel.stop()

        fd = 20  # Close all descriptors. Creepy thing
        while fd > 2:
            try:
                os.close(fd)
                logging.debug("Closed descriptor #%i" % fd)
            except:
                pass
            fd -= 1

        os.execv(sys.argv[0], sys.argv)
    else:
        logging.info("Stopped by request")
Esempio n. 5
0
class Tester:
    def divide(self, a, b):
        return a / b

    def inner(self):
        self.divide(2, 0)

    def test(self):
        self.inner()

import exconsole

def testcmd(*args, **kwargs):
    print 'Test!'

exconsole.register(commands=[('_t', 'Test', testcmd)])

def fun():
    Tester().test()

fun()
Esempio n. 6
0
def run():
    reload(sys)
    sys.setdefaultencoding('utf8')

    try:
        locale.setlocale(locale.LC_ALL, '')
    except:
        logging.warning('Couldn\'t set default locale')

    logging.info('Ajenti %s running on platform: %s' %
                 (ajenti.version, ajenti.platform))

    if ajenti.debug:
        exconsole.register()

    # Load plugins
    ajenti.plugins.manager.load_all()

    bind_spec = (ajenti.config.tree.http_binding.host,
                 ajenti.config.tree.http_binding.port)
    if ':' in bind_spec[0]:
        addrs = socket.getaddrinfo(bind_spec[0], bind_spec[1], socket.AF_INET6,
                                   0, socket.SOL_TCP)
        bind_spec = addrs[0][-1]

    ssl_tunnel = None
    if not bind_spec[0].startswith('/'):
        if ajenti.config.tree.ssl.enable:
            ssl_tunnel = SSLTunnel()
            ssl_tunnel.start(bind_spec[0], bind_spec[1],
                             ajenti.config.tree.ssl.certificate_path)
            if ssl_tunnel.check():
                logging.info('SSL tunnel running fine')
                bind_spec = ('127.0.0.1', ssl_tunnel.port)
                atexit.register(ssl_tunnel.stop)
            else:
                logging.error('SSL tunnel failed to start')

    # Fix stupid socketio bug (it tries to do *args[0][0])
    socket.socket.__getitem__ = lambda x, y: None

    logging.info('Starting server on %s' % (bind_spec, ))
    if bind_spec[0].startswith('/'):
        if os.path.exists(bind_spec[0]):
            os.unlink(bind_spec[0])
        listener = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        try:
            listener.bind(bind_spec[0])
        except:
            logging.error('Could not bind to %s' % bind_spec[0])
            sys.exit(1)
        listener.listen(10)
    else:
        listener = socket.socket(
            socket.AF_INET6 if ':' in bind_spec[0] else socket.AF_INET,
            socket.SOCK_STREAM)
        listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        try:
            listener.bind(bind_spec)
        except:
            logging.error('Could not bind to %s' % (bind_spec, ))
            sys.exit(1)
        listener.listen(10)

    stack = [
        SessionMiddleware(),
        AuthenticationMiddleware(),
        CentralDispatcher()
    ]
    ajenti.server = SocketIOServer(
        listener,
        log=open(os.devnull, 'w'),
        application=HttpRoot(stack).dispatch,
        policy_server=False,
        resource='ajenti:socket',
    )

    # auth.log
    try:
        syslog.openlog(
            ident=str(b'ajenti'),
            facility=syslog.LOG_AUTH,
        )
    except:
        syslog.openlog(b'ajenti')

    try:
        gevent.signal(signal.SIGTERM, lambda: sys.exit(0))
    except:
        pass

    ajenti.feedback.start()
    ajenti.ipc.IPCServer.get(manager.context).start()

    Inflater.get(manager.context).precache()
    ajenti.server.serve_forever()

    if hasattr(ajenti.server, 'restart_marker'):
        logging.warn('Restarting by request')
        if ssl_tunnel:
            ssl_tunnel.stop()

        fd = 20  # Close all descriptors. Creepy thing
        while fd > 2:
            try:
                os.close(fd)
                logging.debug('Closed descriptor #%i' % fd)
            except:
                pass
            fd -= 1

        os.execv(sys.argv[0], sys.argv)
    else:
        logging.info('Stopped by request')
Esempio n. 7
0
class Tester:
    def divide(self, a, b):
        return a / b

    def inner(self):
        self.divide(2, 0)

    def test(self):
        self.inner()

import exconsole
exconsole.register()

def fun():
    Tester().test()

fun()
Esempio n. 8
0
def run():
    reload(sys)
    sys.setdefaultencoding('utf8')
    
    try:
        locale.setlocale(locale.LC_ALL, '')
    except:
        logging.warning('Couldn\'t set default locale')

    logging.info('Ajenti %s running on platform: %s' % (ajenti.version, ajenti.platform))

    if ajenti.debug:
        exconsole.register()

    # Load plugins
    ajenti.plugins.manager.load_all()

    bind_spec = (ajenti.config.tree.http_binding.host, ajenti.config.tree.http_binding.port)
    if ':' in bind_spec[0]:
        addrs = socket.getaddrinfo(bind_spec[0], bind_spec[1], socket.AF_INET6, 0, socket.SOL_TCP)
        bind_spec = addrs[0][-1]

    ssl_tunnel = None
    if not bind_spec[0].startswith('/'):
        if ajenti.config.tree.ssl.enable:
            ssl_tunnel = SSLTunnel()
            ssl_tunnel.start(bind_spec[0], bind_spec[1], ajenti.config.tree.ssl.certificate_path)
            if ssl_tunnel.check():
                logging.info('SSL tunnel running fine')
                bind_spec = ('127.0.0.1', ssl_tunnel.port)
                atexit.register(ssl_tunnel.stop)
            else:
                logging.error('SSL tunnel failed to start')

    # Fix stupid socketio bug (it tries to do *args[0][0])
    socket.socket.__getitem__ = lambda x, y: None

    logging.info('Starting server on %s' % (bind_spec, ))
    if bind_spec[0].startswith('/'):
        if os.path.exists(bind_spec[0]):
            os.unlink(bind_spec[0])
        listener = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
        try:
            listener.bind(bind_spec[0])
        except:
            logging.error('Could not bind to %s' % bind_spec[0])
            sys.exit(1)
        listener.listen(10)
    else:
        listener = socket.socket(socket.AF_INET6 if ':' in bind_spec[0] else socket.AF_INET, socket.SOCK_STREAM)
        try:
            listener.setsockopt(socket.IPPROTO_TCP, socket.TCP_CORK, 1)
        except:
            listener.setsockopt(socket.IPPROTO_TCP, socket.TCP_NOPUSH, 1)
        listener.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        try:
            listener.bind(bind_spec)
        except:
            logging.error('Could not bind to %s' % (bind_spec,))
            sys.exit(1)
        listener.listen(10)

    stack = [SessionMiddleware(), AuthenticationMiddleware(), CentralDispatcher()]
    ajenti.server = SocketIOServer(
        listener,
        log=open(os.devnull, 'w'),
        application=HttpRoot(stack).dispatch,
        policy_server=False,
        resource='ajenti:socket',
    )

    # auth.log
    try:
        syslog.openlog(
            ident=str(b'ajenti'),
            facility=syslog.LOG_AUTH,
        )
    except:
        syslog.openlog(b'ajenti')

    try:
        gevent.signal(signal.SIGTERM, lambda: sys.exit(0))
    except:
        pass

    ajenti.feedback.start()
    ajenti.ipc.IPCServer.get(manager.context).start()

    Inflater.get(manager.context).precache()
    ajenti.server.serve_forever()

    if hasattr(ajenti.server, 'restart_marker'):
        logging.warn('Restarting by request')
        if ssl_tunnel:
            ssl_tunnel.stop()

        fd = 20  # Close all descriptors. Creepy thing
        while fd > 2:
            try:
                os.close(fd)
                logging.debug('Closed descriptor #%i' % fd)
            except:
                pass
            fd -= 1

        os.execv(sys.argv[0], sys.argv)
    else:
        logging.info('Stopped by request')