X-Git-Url: https://git.ucc.asn.au/?p=uccvend-vendserver.git;a=blobdiff_plain;f=sql-edition%2Fservers%2FVendServer.py;h=f7bd1cdf642f2bc713998b291fcf80a25a312bd0;hp=30fac43b4f601476c788d191ffb699f2dc01279d;hb=28e0903fea49a38a15d0b1d390c92d2879990238;hpb=1ee12bb474a7f55a68920fbfab5f79c148248721 diff --git a/sql-edition/servers/VendServer.py b/sql-edition/servers/VendServer.py index 30fac43..f7bd1cd 100755 --- a/sql-edition/servers/VendServer.py +++ b/sql-edition/servers/VendServer.py @@ -413,7 +413,7 @@ def parse_args(): op.add_option('-n', '--hostname', dest='host', default='localhost', help='the hostname to connect to for virtual vending machine mode (default: localhost)') op.add_option('-p', '--port', dest='port', default=5150, type='int', help='the port number to connect to (default: 5150)') op.add_option('-l', '--log-file', metavar='FILE', dest='log_file', default='', help='log output to the specified file') - op.add_option('-s', '--syslog', dest='syslog', action='store_true', default=False, help='log output to syslog') + op.add_option('-s', '--syslog', dest='syslog', metavar='FACILITY', default=None, help='log output to given syslog facility') op.add_option('-d', '--daemon', dest='daemon', action='store_true', default=False, help='run as a daemon') op.add_option('-v', '--verbose', dest='verbose', action='store_true', default=False, help='spit out lots of debug output') op.add_option('-q', '--quiet', dest='quiet', action='store_true', default=False, help='only report errors') @@ -451,9 +451,7 @@ class VendConfigFile: self.__dict__[option] = value except ConfigParser.Error, e: - logging.critical("Error reading config file "+config_file+": " + str(e)) - logging.critical("Bailing out") - sys.exit(1) + raise SystemExit("Error reading config file "+config_file+": " + str(e)) def create_pid_file(name): try: @@ -472,9 +470,9 @@ def set_stuff_up(): signal.signal(signal.SIGINT, stop_server) options = parse_args() - set_up_logging(options) config_opts = VendConfigFile(options.config_file, config_options) if options.daemon: become_daemon() + set_up_logging(options) if options.pid_file != '': create_pid_file(options.pid_file) return options, config_opts @@ -489,9 +487,10 @@ def clean_up_nicely(options, config_opts): def set_up_logging(options): logger = logging.getLogger() - stderr_logger = logging.StreamHandler(sys.stderr) - stderr_logger.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) - logger.addHandler(stderr_logger) + if not options.daemon: + stderr_logger = logging.StreamHandler(sys.stderr) + stderr_logger.setFormatter(logging.Formatter('%(levelname)s: %(message)s')) + logger.addHandler(stderr_logger) if options.log_file != '': try: @@ -501,8 +500,8 @@ def set_up_logging(options): except IOError, e: logger.warning('unable to write to log file '+options.log_file+': '+str(e)) - if options.syslog: - sys_logger = logging.handlers.SysLogHandler('/dev/log', 'daemon') + if options.syslog != None: + sys_logger = logging.handlers.SysLogHandler('/dev/log', options.syslog) sys_logger.setFormatter(logging.Formatter('vendserver[%d]'%(os.getpid()) + ' %(levelname)s: %(message)s')) logger.addHandler(sys_logger) @@ -519,8 +518,12 @@ def become_daemon(): os.dup2(fd, 0) os.dup2(fd, 1) os.dup2(fd, 2) - if os.fork() != 0: - sys.exit(0) + try: + if os.fork() != 0: + sys.exit(0) + os.setsid() + except OSError, e: + raise SystemExit('failed to fork: '+str(e)) def do_vend_server(options, config_opts): while True: