diff --git a/molteniron/moltenirond-helper b/molteniron/moltenirond-helper index 0cbc7e3..795f792 100755 --- a/molteniron/moltenirond-helper +++ b/molteniron/moltenirond-helper @@ -25,10 +25,20 @@ from molteniron import moltenirond PID = "/var/run/moltenirond.pid" YAML_CONF = "/usr/local/etc/molteniron/conf.yaml" +ERROR_LOGFILE = "/tmp/MoltenIron-error-logfile" + +class MoltenIronPIDNotFound(RuntimeError): + """os.path.isfile() error: The PID file does not exist""" + +class MoltenIronKillError(RuntimeError): + """os.kill() error""" + +class MoltenIronReadLinesError(RuntimeError): + """fobj.readlines() error""" def get_moltenirond_pid(): if not os.path.isfile(PID): - return -1 + raise MoltenIronPIDNotFound("isfile error %s" % (PID, )) with open(PID) as fobj: lines = fobj.readlines() @@ -38,12 +48,12 @@ def get_moltenirond_pid(): try: # Send harmless kill signal in order to test existance os.kill(pid, 0) - except Exception: - return -1 + except Exception as e: + raise MoltenIronKillError("os.kill error: %s" % (e, )) return pid - except Exception: - return -1 + except Exception as e: + raise MoltenIronReadLinesError("readlines error: %s" % (e, )) def moltenirond_main(): with open(YAML_CONF, "r") as fobj: @@ -51,6 +61,11 @@ def moltenirond_main(): moltenirond.listener(conf) +def log_error(s): + with open(ERROR_LOGFILE, "a+") as fobj: + fobj.writelines(s + "\n") + print >> sys.stderr, s + if __name__ == "__main__": parser = argparse.ArgumentParser(description="Molteniron daemon helper") @@ -98,27 +113,36 @@ if __name__ == "__main__": if len(args.command) != 1: msg = "Error: Expecting one command? Received: %s" % (args.command, ) - print >> sys.stderr, msg + log_error(msg) sys.exit (1) if args.command[0].upper().lower() == "start": - pid = get_moltenirond_pid() + try: + pid = get_moltenirond_pid() + except MoltenIronPIDNotFound: + pid = -1 if pid > 0: - print >> sys.stderr, "Error: The daemon is already running" + log_error("Error: The daemon is already running") sys.exit(1) daemon = Daemonize(app="moltenirond", pid=PID, action=moltenirond_main) daemon.start() elif args.command[0].upper().lower() == "stop": - pid = get_moltenirond_pid() - if pid > 0: - os.remove (PID) - os.kill(pid, signal.SIGTERM) - else: - print >> sys.stderr, "Error: The daemon doesn't exist?" + try: + pid = get_moltenirond_pid() + if pid > 0: + os.remove (PID) + os.kill(pid, signal.SIGTERM) + else: + log_error("Error: The daemon doesn't exist?") + log_error("Error: pid = %d" % (pid, )) + sys.exit(1) + except Exception as e: + log_error("Error: The daemon doesn't exist?") + log_error("Error: %s" % (e, )) sys.exit(1) else: msg = "Error: Unknown command: %s" % (args.command[0], ) - print >> sys.stderr, msg + log_error(msg) sys.exit (1)