int main(int argc, char *argv[]) { MythJobQueueCommandLineParser cmdline; if (!cmdline.Parse(argc, argv)) { cmdline.PrintHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } if (cmdline.toBool("showhelp")) { cmdline.PrintHelp(); return GENERIC_EXIT_OK; } if (cmdline.toBool("showversion")) { cmdline.PrintVersion(); return GENERIC_EXIT_OK; } QCoreApplication a(argc, argv); QCoreApplication::setApplicationName(MYTH_APPNAME_MYTHJOBQUEUE); int retval = cmdline.Daemonize(); if (retval != GENERIC_EXIT_OK) return retval; bool daemonize = cmdline.toBool("daemon"); QString mask("general"); if ((retval = cmdline.ConfigureLogging(mask, daemonize)) != GENERIC_EXIT_OK) return retval; CleanupGuard callCleanup(cleanup); #ifndef _WIN32 QList<int> signallist; signallist << SIGINT << SIGTERM << SIGSEGV << SIGABRT << SIGBUS << SIGFPE << SIGILL; #if ! CONFIG_DARWIN signallist << SIGRTMIN; #endif SignalHandler::Init(signallist); signal(SIGHUP, SIG_IGN); #endif gContext = new MythContext(MYTH_BINARY_VERSION); if (!gContext->Init(false)) { LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to init MythContext, exiting."); return GENERIC_EXIT_NO_MYTHCONTEXT; } cmdline.ApplySettingsOverride(); if (!gCoreContext->ConnectToMasterServer()) { LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to connect to master server"); return GENERIC_EXIT_CONNECT_ERROR; } jobqueue = new JobQueue(false); MythSystemEventHandler *sysEventHandler = new MythSystemEventHandler(); HouseKeeper *housekeeping = new HouseKeeper(); #ifdef __linux__ #ifdef CONFIG_BINDINGS_PYTHON housekeeping->RegisterTask(new HardwareProfileTask()); #endif #endif housekeeping->Start(); int exitCode = a.exec(); if (sysEventHandler) delete sysEventHandler; return exitCode ? exitCode : GENERIC_EXIT_OK; }
int main(int argc, char *argv[]) { int quiet = 0; MythJobQueueCommandLineParser cmdline; if (!cmdline.Parse(argc, argv)) { cmdline.PrintHelp(); return GENERIC_EXIT_INVALID_CMDLINE; } if (cmdline.toBool("showhelp")) { cmdline.PrintHelp(); return GENERIC_EXIT_OK; } if (cmdline.toBool("showversion")) { cmdline.PrintVersion(); return GENERIC_EXIT_OK; } QCoreApplication a(argc, argv); QMap<QString, QString> settingsOverride = cmdline.GetSettingsOverride(); bool daemonize = false; QCoreApplication::setApplicationName(MYTH_APPNAME_MYTHJOBQUEUE); QString filename; if (cmdline.toBool("verbose")) if (parse_verbose_arg(cmdline.toString("verbose")) == GENERIC_EXIT_INVALID_CMDLINE) return GENERIC_EXIT_INVALID_CMDLINE; if (cmdline.toBool("quiet")) { quiet = cmdline.toUInt("quiet"); if (quiet > 1) { print_verbose_messages = VB_NONE; parse_verbose_arg("none"); } } int facility = cmdline.GetSyslogFacility(); bool dblog = !cmdline.toBool("nodblog"); if (cmdline.toBool("pidfile")) pidfile = cmdline.toString("pidfile"); if (cmdline.toBool("daemon")) daemonize = true; CleanupGuard callCleanup(cleanup); logfile = cmdline.GetLogFilePath(); logStart(logfile, quiet, facility, dblog); ofstream pidfs; if (pidfile.size()) { pidfs.open(pidfile.toAscii().constData()); if (!pidfs) { VERBOSE(VB_IMPORTANT, LOC_ERR + "Could not open pid file" + ENO); return GENERIC_EXIT_PERMISSIONS_ERROR; } } if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) VERBOSE(VB_IMPORTANT, LOC_WARN + "Unable to ignore SIGPIPE"); if (daemonize && (daemon(0, 1) < 0)) { VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to daemonize" + ENO); return GENERIC_EXIT_DAEMONIZING_ERROR; } if (pidfs) { pidfs << getpid() << endl; pidfs.close(); } VERBOSE(VB_IMPORTANT, QString("%1 version: %2 [%3] www.mythtv.org") .arg(MYTH_APPNAME_MYTHJOBQUEUE) .arg(MYTH_SOURCE_PATH) .arg(MYTH_SOURCE_VERSION)); gContext = new MythContext(MYTH_BINARY_VERSION); if (!gContext->Init(false)) { VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to init MythContext, exiting."); return GENERIC_EXIT_NO_MYTHCONTEXT; } if (settingsOverride.size()) { QMap<QString, QString>::iterator it; for (it = settingsOverride.begin(); it != settingsOverride.end(); ++it) { VERBOSE(VB_IMPORTANT, QString("Setting '%1' being forced to '%2'") .arg(it.key()).arg(*it)); gCoreContext->OverrideSettingForSession(it.key(), *it); } } if (!gCoreContext->ConnectToMasterServer()) { VERBOSE(VB_IMPORTANT, LOC_ERR + "Failed to connect to master server"); return GENERIC_EXIT_CONNECT_ERROR; } jobqueue = new JobQueue(false); MythSystemEventHandler *sysEventHandler = new MythSystemEventHandler(); int exitCode = a.exec(); if (sysEventHandler) delete sysEventHandler; return exitCode ? exitCode : GENERIC_EXIT_OK; }