def saveAll(): global showList # save config logger.log(u"Saving config file to disk") save_config()
def initialize(consoleLogging=True): with INIT_LOCK: global LOG_DIR, __INITIALIZED__ if __INITIALIZED__: return False CheckSection(CFG, "General") LOG_DIR = check_setting_str(CFG, "General", "log_dir", "Logs") if not helpers.makeDir(LOG_DIR): logger.log(u"!!! No log folder, logging to screen only!", logger.ERROR) GIT_PATH = check_setting_str(CFG, "General", "git_path", "") IGNORE_WORDS = check_setting_str(CFG, "General", "ignore_words", IGNORE_WORDS) EXTRA_SCRIPTS = [x for x in check_setting_str(CFG, "General", "extra_scripts", "").split("|") if x] CheckSection(CFG, "GUI") COMING_EPS_LAYOUT = check_setting_str(CFG, "GUI", "coming_eps_layout", "banner") COMING_EPS_DISPLAY_PAUSED = bool(check_setting_int(CFG, "GUI", "coming_eps_display_paused", 0)) COMING_EPS_SORT = check_setting_str(CFG, "GUI", "coming_eps_sort", "date") # start up all the threads logger.p_log_instance.initLogging(consoleLogging=consoleLogging) versionCheckScheduler = scheduler.Scheduler( versionChecker.CheckVersion(), cycleTime=datetime.timedelta(hours=12), threadName="CHECKVERSION", runImmediately=True, ) __INITIALIZED__ = True return True
def restart(soft=True): if soft: halt() saveAll() # logger.log(u"Restarting cherrypy") # cherrypy.engine.restart() logger.log(u"Re-initializing all data") initialize() else: saveAndShutdown(restart=True)
def invoke_command(to_call, *args, **kwargs): global invoked_command def delegate(): to_call(*args, **kwargs) invoked_command = delegate logger.log( u"Placed invoked command: " + repr(invoked_command) + " for " + repr(to_call) + " with " + repr(args) + " and " + repr(kwargs), logger.DEBUG, )
def halt(): global __INITIALIZED__, started with INIT_LOCK: if __INITIALIZED__: logger.log(u"Aborting all threads") # abort all the threads versionCheckScheduler.abort = True logger.log(u"Waiting for the VERSIONCHECKER thread to exit") try: versionCheckScheduler.thread.join(10) except: pass __INITIALIZED__ = False
def saveAndShutdown(restart=False): halt() saveAll() if CREATEPID: logger.log(u"Removing pidfile " + str(PIDFILE)) os.remove(PIDFILE) if restart: install_type = versionCheckScheduler.action.install_type popen_list = [] if install_type in ("git", "source"): popen_list = [sys.executable, MY_FULLNAME] elif install_type == "win": if hasattr(sys, "frozen"): # c:\dir\to\updater.exe 12345 c:\dir\to\sickbeard.exe popen_list = [os.path.join(PROG_DIR, "updater.exe"), str(PID), sys.executable] else: logger.log(u"Unknown SB launch method, please file a bug report about this", logger.ERROR) popen_list = [ sys.executable, os.path.join(PROG_DIR, "updater.py"), str(PID), sys.executable, MY_FULLNAME, ] if popen_list: popen_list += MY_ARGS if "--nolaunch" not in popen_list: popen_list += ["--nolaunch"] logger.log(u"Restarting Sick Beard with " + str(popen_list)) subprocess.Popen(popen_list, cwd=os.getcwd()) os._exit(0)
def main(): # do some preliminary stuff sickbeard.MY_FULLNAME = os.path.normpath(os.path.abspath(__file__)) sickbeard.MY_NAME = os.path.basename(sickbeard.MY_FULLNAME) sickbeard.PROG_DIR = os.path.dirname(sickbeard.MY_FULLNAME) sickbeard.DATA_DIR = sickbeard.PROG_DIR sickbeard.MY_ARGS = sys.argv[1:] sickbeard.CREATEPID = False sickbeard.DAEMON = False # Need console logging for SickBeard.py and SickBeard-console.exe consoleLogging = (not hasattr(sys, "frozen")) or (sickbeard.MY_NAME.lower().find('-console') > 0) # Rename the main thread threading.currentThread().name = "MAIN" try: opts, args = getopt.getopt(sys.argv[1:], "qfdp::", ['quiet', 'forceupdate', 'port=', 'daemon', 'noresize', 'pidfile=', 'nolaunch', 'config=', 'datadir=']) except getopt.GetoptError: print "Available Options: --quiet, --forceupdate, --port, --daemon, --noresize, --pidfile, --nolaunch, --config, --datadir" sys.exit() forceUpdate = False forcedPort = None noLaunch = False for o, a in opts: # For now we'll just silence the logging if o in ('-q', '--quiet'): consoleLogging = False # Should we update (from tvdb) all shows in the DB right away? if o in ('-f', '--forceupdate'): forceUpdate = True # Suppress launching web browser # Needed for OSes without default browser assigned # Prevent duplicate browser window when restarting in the app if o in ('--nolaunch',): noLaunch = True # Override default/configured port if o in ('-p', '--port'): forcedPort = int(a) # Run as a daemon if o in ('-d', '--daemon'): if sys.platform == 'win32': print "Daemonize not supported under Windows, starting normally" else: consoleLogging = False sickbeard.DAEMON = True # Prevent resizing of the banner/posters even if PIL is installed if o in ('--noresize',): sickbeard.NO_RESIZE = True # Specify folder to load the config file from if o in ('--config',): sickbeard.CONFIG_FILE = os.path.abspath(a) # Specify folder to use as the data dir if o in ('--datadir',): sickbeard.DATA_DIR = os.path.abspath(a) # Write a pidfile if requested if o in ('--pidfile',): sickbeard.PIDFILE = str(a) # If the pidfile already exists, sickbeard may still be running, so exit if os.path.exists(sickbeard.PIDFILE): sys.exit("PID file '" + sickbeard.PIDFILE + "' already exists. Exiting.") # The pidfile is only useful in daemon mode, make sure we can write the file properly if sickbeard.DAEMON: sickbeard.CREATEPID = True try: file(sickbeard.PIDFILE, 'w').write("pid\n") except IOError, e: raise SystemExit("Unable to write PID file: %s [%d]" % (e.strerror, e.errno)) else: logger.log(u"Not running in daemon mode. PID file creation disabled.")
os.umask(prev and int('077', 8)) # Make the child a session-leader by detaching from the terminal try: pid = os.fork() # @UndefinedVariable - only available in UNIX if pid != 0: sys.exit(0) except OSError, e: raise RuntimeError("2nd fork failed: %s [%d]" % (e.strerror, e.errno)) dev_null = file('/dev/null', 'r') os.dup2(dev_null.fileno(), sys.stdin.fileno()) if sickbeard.CREATEPID: pid = str(os.getpid()) logger.log(u"Writing PID " + pid + " to " + str(sickbeard.PIDFILE)) file(sickbeard.PIDFILE, 'w').write("%s\n" % pid) def main(): # do some preliminary stuff sickbeard.MY_FULLNAME = os.path.normpath(os.path.abspath(__file__)) sickbeard.MY_NAME = os.path.basename(sickbeard.MY_FULLNAME) sickbeard.PROG_DIR = os.path.dirname(sickbeard.MY_FULLNAME) sickbeard.DATA_DIR = sickbeard.PROG_DIR sickbeard.MY_ARGS = sys.argv[1:] sickbeard.CREATEPID = False sickbeard.DAEMON = False # Need console logging for SickBeard.py and SickBeard-console.exe
def sig_handler(signum=None, frame=None): if type(signum) != type(None): logger.log(u"Signal %i caught, saving and exiting..." % int(signum)) saveAndShutdown()