def main(): ''' Can only be execute as root, since we need to log in /var/run this can be changed later on ''' # Go away if you are not root if not os.geteuid() == 0: sys.exit("monitor: You must be root to run this script\n") # Parse the command line options try: opts, args = getopt.getopt(sys.argv[1:], \ 'hdv', \ ["help", "debug", "version"]) except: _usage("error parsing options") for opt in opts: if opt[0] == '-v' or opt[0] == '--version': print "%s: version %s" % (os.path.basename(sys.argv[0]), \ SCRIPT_VERSION) sys.exit(0) elif opt[0] == '-h' or opt[0] == '--help': _usage() elif opt[0] == '-d' or opt[0] == '--debug': global _debug _debug = True if len(args) > 2: _usage('Invalid args %s %d' % args, len(args)) # Initialize the logger log.config_logging() global _config _config = get_config_parser(MONITOR_CONF) monitor_daemon = MonitorDaemon('/var/run/monitor.pid') if args: if 'stop' == args[0]: _logger.info("****************** Monitor stopping ********************") monitor_daemon.stop() elif 'restart' == args[0]: _logger.info("***************** Monitor restarting *******************") monitor_daemon.restart() else: err_msg = "Invalid command %s" % (repr(args[0]),) print >> sys.stderr, err_msg _logger.error("%s" % (err_msg,)) sys.exit(2) sys.exit(0) if _debug: _logger.info("************ Monitor starting (debug mode)**************") monitor_daemon.foreground() else: _logger.info("****************** Monitor starting ********************") monitor_daemon.start()
parser = argparse.ArgumentParser() parser.add_argument('-c', '--config', action='store', dest='CONFIG_FILE', help='/full/path/to/config.file (usually hblink.cfg)') parser.add_argument('-l', '--logging', action='store', dest='LOG_LEVEL', help='Override config file logging level.') cli_args = parser.parse_args() # Ensure we have a path for the config file, if one wasn't specified, then use the execution directory if not cli_args.CONFIG_FILE: cli_args.CONFIG_FILE = os.path.dirname(os.path.abspath(__file__))+'/hblink.cfg' # Call the external routine to build the configuration dictionary CONFIG = config.build_config(cli_args.CONFIG_FILE) # Call the external routing to start the system logger if cli_args.LOG_LEVEL: CONFIG['LOGGER']['LOG_LEVEL'] = cli_args.LOG_LEVEL logger = log.config_logging(CONFIG['LOGGER']) logger.info('\n\nCopyright (c) 2013, 2014, 2015, 2016, 2018, 2019, 2020\n\tThe Regents of the K0USY Group. All rights reserved.\n') logger.debug('(GLOBAL) Logging system started, anything from here on gets logged') # Set up the signal handler def sig_handler(_signal, _frame): logger.info('(GLOBAL) SHUTDOWN: HBLINK IS TERMINATING WITH SIGNAL %s', str(_signal)) hblink_handler(_signal, _frame) logger.info('(GLOBAL) SHUTDOWN: ALL SYSTEM HANDLERS EXECUTED - STOPPING REACTOR') reactor.stop() # Set signal handers so that we can gracefully exit if need be for sig in [signal.SIGTERM, signal.SIGINT]: signal.signal(sig, sig_handler) peer_ids, subscriber_ids, talkgroup_ids = mk_aliases(CONFIG)