args, unknown = parser.parse_known_args() if args.quiet: log.quiet_output() with open("version.txt") as f: version = f.read() logger.notice("Starting NZBHydra %s" % version) logger.notice("Base path is {}".format(basepath)) run(args) if "RESTART" in os.environ.keys() and os.environ["RESTART"] == "1": if "STARTEDBYTRAYHELPER" in os.environ.keys(): # We don't restart ourself but use a special return code so we are restarted by the tray tool logger.info("Shutting down so we can be restarted by tray tool") if "AFTERUPDATE" in os.environ.keys(): logger.debug("Shutting down with return code -1 to signal tray helper that it should also restart itself") os._exit(-1) else: logger.debug("Shutting down with return code -2 to signal tray helper that it should only restart NZBHydra") os._exit(-2) else: # Otherwise we handle the restart ourself os.environ["RESTART"] = "0" if os.path.exists(args.pidfile): logger.debug("Removing old PID file %s" % args.pidfile) os.remove(args.pidfile) args = [sys.executable] args.extend(sys.argv) if "--restarted" not in args: logger.debug("Setting restarted flag in command line")
def run(arguments): arguments.config = arguments.config if os.path.isabs(arguments.config) else os.path.join(nzbhydra.getBasePath(), arguments.config) arguments.database = arguments.database if os.path.isabs(arguments.database) else os.path.join(nzbhydra.getBasePath(), arguments.database) nzbhydra.configFile = settings_file = arguments.config nzbhydra.databaseFile = database_file = arguments.database logger.notice("Loading settings from {}".format(settings_file)) try: config.load(settings_file) config.save(settings_file) # Write any new settings back to the file log.setup_custom_logger(arguments.logfile, arguments.quiet) except Exception: print("An error occured during migrating the old config. Sorry about that...: ") traceback.print_exc(file=sys.stdout) print("Trying to log messages from migration...") config.logLogMessages() os._exit(-5) try: logger.info("Started") if arguments.daemon: logger.info("Daemonizing...") daemonize(arguments.pidfile) config.logLogMessages() if arguments.clearloganddb: logger.warning("Deleting log file and database now as requested") try: logger.warning("Deleting database file %s" % database_file) os.unlink(database_file) except Exception as e: logger.error("Unable to close or delete log file: %s" % e) try: handler = logger.handlers[1] if len(logger.handlers) == 2 else logger.handlers[0] filename = handler.stream.name if filename and os.path.exists(filename): logger.warn("Deleting file %s" % filename) handler.flush() handler.close() logger.removeHandler(handler) os.unlink(filename) logger.addHandler(handler) except Exception as e: print("Unable to close or delete log file: %s" % e) try: import _sqlite3 logger.debug("SQLite3 version: %s" % _sqlite3.sqlite_version) except: logger.error("Unable to log SQLite version") logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) logger.info("Starting db") indexers.read_indexers_from_config() if config.settings.main.debug: logger.info("Debug mode enabled") # Clean up any "old" files from last update oldfiles = glob.glob("*.updated") if len(oldfiles) > 0: logger.info("Deleting %d old files remaining from update" % len(oldfiles)) for filename in oldfiles: try: if "hydratray" not in filename: logger.debug("Deleting %s" % filename) os.remove(filename) else: logger.debug("Not deleting %s because it's still running. TrayHelper will restart itself" % filename) except Exception: logger.warn("Unable to delete old file %s. Please delete manually" % filename) host = config.settings.main.host if arguments.host is None else arguments.host port = config.settings.main.port if arguments.port is None else arguments.port socksproxy = config.settings.main.socksProxy if arguments.socksproxy is None else arguments.socksproxy if socksproxy: webaccess.set_proxies(socksproxy) elif config.settings.main.httpProxy: webaccess.set_proxies(config.settings.main.httpProxy, config.settings.main.httpsProxy) logger.notice("Starting web app on %s:%d" % (host, port)) if config.settings.main.externalUrl is not None and config.settings.main.externalUrl != "": f = furl(config.settings.main.externalUrl) else: f = furl() f.host = "127.0.0.1" if config.settings.main.host == "0.0.0.0" else config.settings.main.host f.port = port f.scheme = "https" if config.settings.main.ssl else "http" if not arguments.nobrowser and config.settings.main.startupBrowser: if arguments.restarted: logger.info("Not opening the browser after restart") else: logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.notice("Go to %s for the frontend" % f.url) web.run(host, port, basepath) except Exception: logger.exception("Fatal error occurred")
parser.add_argument('--host', '-H', action='store', help='Host to run on') parser.add_argument('--port', '-p', action='store', help='Port to run on', type=int) parser.add_argument('--nobrowser', action='store_true', help='Don\'t open URL on startup', default=False) parser.add_argument('--daemon', '-D', action='store_true', help='Run as daemon. *nix only', default=False) parser.add_argument('--quiet', '-q', action='store_true', help='Quiet (no output)', default=False) parser.add_argument('--pidfile', action='store', help='PID file. Only relevant with daemon argument', default="nzbhydra.pid") parser.add_argument('--restarted', action='store_true', help=argparse.SUPPRESS, default=False) parser.add_argument('--socksproxy', action='store', help='SOCKS proxy to use in format host:port', default=None) args, unknown = parser.parse_known_args() if args.quiet: log.quiet_output() logger.notice("Starting NZBHydra") logger.debug("Base path is {}".format(basepath)) run(args) if "RESTART" in os.environ.keys() and os.environ["RESTART"] == "1": if "STARTEDBYTRAYHELPER" in os.environ.keys(): # We don't restart ourself but use a special return code so we are restarted by the tray tool logger.info("Shutting down so we can be restarted by tray tool") if "AFTERUPDATE" in os.environ.keys(): logger.debug("Shutting down with return code -1 to signal tray helper that it should also restart itself") os._exit(-1) else: logger.debug("Shutting down with return code -2 to signal tray helper that it should only restart NZBHydra") os._exit(-2) else: # Otherwise we handle the restart ourself os.environ["RESTART"] = "0"
def run(arguments): nzbhydra.configFile = settings_file = arguments.config nzbhydra.databaseFile = database_file = arguments.database logger.notice("Loading settings from {}".format(settings_file)) try: config.load(settings_file) config.save(settings_file) # Write any new settings back to the file log.setup_custom_logger(arguments.logfile, arguments.quiet) except Exception: print("An error occured during migrating the old config. Sorry about that...: ") traceback.print_exc(file=sys.stdout) print("Trying to log messages from migration...") config.logLogMessages() os._exit(-5) try: logger.info("Started") if arguments.daemon: logger.info("Daemonizing...") daemonize(arguments.pidfile) config.logLogMessages() logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) database.db.init(database_file) indexers.read_indexers_from_config() if config.settings.main.debug: logger.info("Debug mode enabled") # Clean up any "old" files from last update oldfiles = glob.glob("*.updated") if len(oldfiles) > 0: logger.info("Deleting %d old files remaining from update" % len(oldfiles)) for filename in oldfiles: try: if "hydratray" not in filename: logger.debug("Deleting %s" % filename) os.remove(filename) else: logger.debug("Not deleting %s because it's still running. TrayHelper will restart itself" % filename) except Exception: logger.warn("Unable to delete old file %s. Please delete manually" % filename) host = config.settings.main.host if arguments.host is None else arguments.host port = config.settings.main.port if arguments.port is None else arguments.port socksproxy = config.settings.main.socksProxy if arguments.socksproxy is None else arguments.socksproxy # SOCKS proxy settings if socksproxy: try: sockshost, socksport = socksproxy.split(':') # FWIW: this won't work for literal IPv6 addresses except: logger.error('Incorrect SOCKS proxy settings "%s"' % socksproxy) sockshost, socksport = [None, None] if sockshost: logger.info("Using SOCKS proxy at host %s and port %s" % (sockshost, socksport)) publicip = socks_proxy.setSOCKSproxy(sockshost, int(socksport)) if publicip: logger.info("Public IP address via SOCKS proxy: %s" % publicip) else: logger.error("Could not get public IP address. Is the proxy working?") logger.notice("Starting web app on %s:%d" % (host, port)) if config.settings.main.externalUrl is not None and config.settings.main.externalUrl != "": f = furl(config.settings.main.externalUrl) else: f = furl() f.host = "127.0.0.1" f.port = port f.scheme = "https" if config.settings.main.ssl else "http" if not arguments.nobrowser and config.settings.main.startupBrowser: if arguments.restarted: logger.info("Not opening the browser after restart") else: logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.notice("Go to %s for the frontend" % f.url) web.run(host, port, basepath) except Exception: logger.exception("Fatal error occurred")
def run(arguments): arguments.config = arguments.config if os.path.isabs( arguments.config) else os.path.join(nzbhydra.getBasePath(), arguments.config) arguments.database = arguments.database if os.path.isabs( arguments.database) else os.path.join(nzbhydra.getBasePath(), arguments.database) nzbhydra.configFile = settings_file = arguments.config nzbhydra.databaseFile = database_file = arguments.database logger.notice("Loading settings from {}".format(settings_file)) try: config.load(settings_file) config.save(settings_file) # Write any new settings back to the file log.setup_custom_logger(arguments.logfile, arguments.quiet) except Exception: print( "An error occured during migrating the old config. Sorry about that...: " ) traceback.print_exc(file=sys.stdout) print("Trying to log messages from migration...") config.logLogMessages() os._exit(-5) try: logger.info("Started") if arguments.daemon: logger.info("Daemonizing...") daemonize(arguments.pidfile) config.logLogMessages() if arguments.clearloganddb: logger.warning("Deleting log file and database now as requested") try: logger.warning("Deleting database file %s" % database_file) os.unlink(database_file) except Exception as e: logger.error("Unable to close or delete log file: %s" % e) try: handler = logger.handlers[1] if len( logger.handlers) == 2 else logger.handlers[0] filename = handler.stream.name if filename and os.path.exists(filename): logger.warn("Deleting file %s" % filename) handler.flush() handler.close() logger.removeHandler(handler) os.unlink(filename) logger.addHandler(handler) except Exception as e: print("Unable to close or delete log file: %s" % e) try: import _sqlite3 logger.debug("SQLite3 version: %s" % _sqlite3.sqlite_version) except: logger.error("Unable to log SQLite version") logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) logger.info("Starting db") indexers.read_indexers_from_config() if config.settings.main.debug: logger.info("Debug mode enabled") # Clean up any "old" files from last update oldfiles = glob.glob("*.updated") if len(oldfiles) > 0: logger.info("Deleting %d old files remaining from update" % len(oldfiles)) for filename in oldfiles: try: if "hydratray" not in filename: logger.debug("Deleting %s" % filename) os.remove(filename) else: logger.debug( "Not deleting %s because it's still running. TrayHelper will restart itself" % filename) except Exception: logger.warn( "Unable to delete old file %s. Please delete manually" % filename) host = config.settings.main.host if arguments.host is None else arguments.host port = config.settings.main.port if arguments.port is None else arguments.port nzbhydra.urlBase = config.settings.main.urlBase if arguments.urlbase is None else arguments.urlbase socksproxy = config.settings.main.socksProxy if arguments.socksproxy is None else arguments.socksproxy if socksproxy: webaccess.set_proxies(socksproxy) elif config.settings.main.httpProxy: webaccess.set_proxies(config.settings.main.httpProxy, config.settings.main.httpsProxy) # Download a very small file from github to get a good estimate how many instances of hydra are running. Only executed once per installation (well, per settings.cfg instance) if not config.settings.main.downloadCounterExecuted and not config.settings.main.isFirstStart: try: webaccess.get( "https://github.com/theotherp/apitests/releases/download/v5.0.0/downloadcounter2.zip" ) except: pass config.settings.main.downloadCounterExecuted = True config.save() if config.settings.main.externalUrl is not None and config.settings.main.externalUrl != "": f = furl(config.settings.main.externalUrl) logger.notice("Starting web app on %s:%d" % (host, port)) else: f = furl() if config.settings.main.host == "0.0.0.0": f.host = "127.0.0.1" elif config.settings.main.host == "::": f.host = "[::1]" elif ":" in config.settings.main.host: f.host = "[%s]" % config.settings.main.host else: f.host = config.settings.main.host f.port = port f.scheme = "https" if config.settings.main.ssl else "http" if nzbhydra.urlBase is not None: f.path = nzbhydra.urlBase + "/" logger.notice("Starting web app on %s:%d" % (f.host, port)) if not arguments.nobrowser and config.settings.main.startupBrowser: if arguments.restarted: logger.info("Not opening the browser after restart") else: logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.notice("Go to %s for the frontend" % f.url) if config.settings.main.isFirstStart: config.settings.main.isFirstStart = False config.save() web.run(host, port, basepath) except Exception: logger.exception("Fatal error occurred")
if args.quiet: log.quiet_output() with open("version.txt") as f: version = f.read() logger.notice("Starting NZBHydra %s" % version) logger.notice("Base path is {}".format(basepath)) run(args) if "RESTART" in os.environ.keys() and os.environ["RESTART"] == "1": if "STARTEDBYTRAYHELPER" in os.environ.keys(): # We don't restart ourself but use a special return code so we are restarted by the tray tool logger.info("Shutting down so we can be restarted by tray tool") if "AFTERUPDATE" in os.environ.keys(): logger.debug( "Shutting down with return code -1 to signal tray helper that it should also restart itself" ) os._exit(-1) else: logger.debug( "Shutting down with return code -2 to signal tray helper that it should only restart NZBHydra" ) os._exit(-2) else: # Otherwise we handle the restart ourself os.environ["RESTART"] = "0" if os.path.exists(args.pidfile): logger.debug("Removing old PID file %s" % args.pidfile) os.remove(args.pidfile) args = [sys.executable]
def run(arguments): nzbhydra.configFile = settings_file = arguments.config nzbhydra.databaseFile = database_file = arguments.database logger.notice("Loading settings from {}".format(settings_file)) try: config.load(settings_file) config.save(settings_file) # Write any new settings back to the file log.setup_custom_logger(arguments.logfile, arguments.quiet) except Exception: print( "An error occured during migrating the old config. Sorry about that...: " ) traceback.print_exc(file=sys.stdout) print("Trying to log messages from migration...") config.logLogMessages() os._exit(-5) try: logger.info("Started") if arguments.daemon: logger.info("Daemonizing...") daemonize(arguments.pidfile) config.logLogMessages() logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) database.db.init(database_file) indexers.read_indexers_from_config() if config.settings.main.debug: logger.info("Debug mode enabled") # Clean up any "old" files from last update oldfiles = glob.glob("*.updated") if len(oldfiles) > 0: logger.info("Deleting %d old files remaining from update" % len(oldfiles)) for filename in oldfiles: try: if "hydratray" not in filename: logger.debug("Deleting %s" % filename) os.remove(filename) else: logger.debug( "Not deleting %s because it's still running. TrayHelper will restart itself" % filename) except Exception: logger.warn( "Unable to delete old file %s. Please delete manually" % filename) host = config.settings.main.host if arguments.host is None else arguments.host port = config.settings.main.port if arguments.port is None else arguments.port socksproxy = config.settings.main.socksProxy if arguments.socksproxy is None else arguments.socksproxy # SOCKS proxy settings if socksproxy: try: sockshost, socksport = socksproxy.split( ':') # FWIW: this won't work for literal IPv6 addresses except: logger.error('Incorrect SOCKS proxy settings "%s"' % socksproxy) sockshost, socksport = [None, None] if sockshost: logger.info("Using SOCKS proxy at host %s and port %s" % (sockshost, socksport)) publicip = socks_proxy.setSOCKSproxy(sockshost, int(socksport)) if publicip: logger.info("Public IP address via SOCKS proxy: %s" % publicip) else: logger.error( "Could not get public IP address. Is the proxy working?" ) logger.notice("Starting web app on %s:%d" % (host, port)) if config.settings.main.externalUrl is not None and config.settings.main.externalUrl != "": f = furl(config.settings.main.externalUrl) else: f = furl() f.host = "127.0.0.1" f.port = port f.scheme = "https" if config.settings.main.ssl else "http" if not arguments.nobrowser and config.settings.main.startupBrowser: if arguments.restarted: logger.info("Not opening the browser after restart") else: logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.notice("Go to %s for the frontend" % f.url) web.run(host, port, basepath) except Exception: logger.exception("Fatal error occurred")
parser.add_argument('--restarted', action='store_true', help=argparse.SUPPRESS, default=False) parser.add_argument('--socksproxy', action='store', help='SOCKS proxy to use in format host:port', default=None) args, unknown = parser.parse_known_args() if args.quiet: log.quiet_output() logger.notice("Starting NZBHydra") logger.debug("Base path is {}".format(basepath)) run(args) if "RESTART" in os.environ.keys() and os.environ["RESTART"] == "1": if "STARTEDBYTRAYHELPER" in os.environ.keys(): # We don't restart ourself but use a special return code so we are restarted by the tray tool logger.info("Shutting down so we can be restarted by tray tool") if "AFTERUPDATE" in os.environ.keys(): logger.debug( "Shutting down with return code -1 to signal tray helper that it should also restart itself" ) os._exit(-1) else: logger.debug( "Shutting down with return code -2 to signal tray helper that it should only restart NZBHydra" )
def run(arguments): nzbhydra.configFile = settings_file = arguments.config nzbhydra.databaseFile = database_file = arguments.database logger.notice("Loading settings from {}".format(settings_file)) config.load(settings_file) config.save(settings_file) # Write any new settings back to the file log.setup_custom_logger('root', arguments.logfile, arguments.quiet) try: logger.info("Started") if arguments.daemon: logger.info("Daemonizing...") daemonize(arguments.pidfile) config.logLogMessages() logger.info("Loading database file %s" % database_file) if not os.path.exists(database_file): database.init_db(database_file) else: database.update_db(database_file) database.db.init(database_file) indexers.read_indexers_from_config() if config.settings.main.debug: logger.info("Debug mode enabled") # Clean up any "old" files from last update oldfiles = glob.glob("*.updated") if len(oldfiles) > 0: logger.info("Deleting %d old files remaining from update" % len(oldfiles)) for filename in oldfiles: try: if "hydratray" not in filename: logger.debug("Deleting %s" % filename) os.remove(filename) else: logger.debug("Not deleting %s because it's still running. TrayHelper will restart itself" % filename) except Exception: logger.warn("Unable to delete old file %s. Please delete manually" % filename) host = config.settings.main.host if arguments.host is None else arguments.host port = config.settings.main.port if arguments.port is None else arguments.port logger.notice("Starting web app on %s:%d" % (host, port)) if config.settings.main.externalUrl is not None and config.settings.main.externalUrl != "": f = furl(config.settings.main.externalUrl) else: f = furl() f.host = "127.0.0.1" f.port = port f.scheme = "https" if config.settings.main.ssl else "http" if not arguments.nobrowser and config.settings.main.startupBrowser: if arguments.restarted: logger.info("Not opening the browser after restart") else: logger.info("Opening browser to %s" % f.url) webbrowser.open_new(f.url) else: logger.notice("Go to %s for the frontend" % f.url) web.run(host, port, basepath) except Exception: logger.exception("Fatal error occurred")