Michael DeHaan wrote:
Please correct these, verify "make test" works, try the
daemon/non-daemon modes both, and submit a new patch if you'd like this
added.
Attached.
diff --git a/cobbler/api.py b/cobbler/api.py
index fed4212..10df06f 100644
--- a/cobbler/api.py
+++ b/cobbler/api.py
@@ -59,16 +59,16 @@ DEBUG = 5
class BootAPI:
-
__shared_state = {}
__has_loaded = False
- def __init__(self):
+ def __init__(self, log_settings={}):
"""
Constructor
"""
self.__dict__ = BootAPI.__shared_state
+ self.log_settings = log_settings
self.perms_ok = False
if not BootAPI.__has_loaded:
@@ -111,7 +111,7 @@ class BootAPI:
self.perms_ok = True
def __setup_logger(self,name):
- return utils.setup_logger(name)
+ return utils.setup_logger(name, **self.log_settings)
def last_modified_time(self):
"""
diff --git a/cobbler/cobblerd.py b/cobbler/cobblerd.py
index 5bb83f5..18b016a 100644
--- a/cobbler/cobblerd.py
+++ b/cobbler/cobblerd.py
@@ -59,6 +59,7 @@ def core(logger=None):
else:
# part two: syslog, or syslog+avahi if avahi is installed
do_other_tasks(bootapi, settings, syslog_port, logger)
+ os.waitpid(pid, 0)
def regen_ss_file():
# this is only used for Kerberos auth at the moment.
@@ -82,6 +83,7 @@ def do_xmlrpc_tasks(bootapi, settings, xmlrpc_port, xmlrpc_port2, logger):
do_mandatory_xmlrpc_tasks(bootapi, settings, xmlrpc_port, logger)
else:
do_xmlrpc_rw(bootapi, settings, xmlrpc_port2, logger)
+ os.waitpid(pid2, 0)
else:
logger.debug("xmlrpc_rw is disabled in the settings file")
do_mandatory_xmlrpc_tasks(bootapi, settings, xmlrpc_port, logger)
@@ -109,6 +111,7 @@ def do_other_tasks(bootapi, settings, syslog_port, logger):
do_syslog(bootapi, settings, syslog_port, logger)
else:
do_avahi(bootapi, settings, logger)
+ os.waitpid(pid2, 0)
else:
do_syslog(bootapi, settings, syslog_port, logger)
diff --git a/cobbler/utils.py b/cobbler/utils.py
index 61137ef..fe01209 100644
--- a/cobbler/utils.py
+++ b/cobbler/utils.py
@@ -81,14 +81,14 @@ MODULE_CACHE = {}
_re_kernel = re.compile(r'vmlinuz(.*)')
_re_initrd = re.compile(r'initrd(.*).img')
-def setup_logger(name):
+def setup_logger(name, log_level=logging.INFO, log_file="/var/log/cobbler/cobbler.log"):
logger = logging.getLogger(name)
- logger.setLevel(logging.INFO)
+ logger.setLevel(log_level)
try:
- ch = logging.FileHandler("/var/log/cobbler/cobbler.log")
+ ch = logging.FileHandler(log_file)
except:
raise CX(_("No write permissions on log file. Are you root?"))
- ch.setLevel(logging.INFO)
+ ch.setLevel(log_level)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(message)s")
ch.setFormatter(formatter)
logger.addHandler(ch)
diff --git a/config/cobblerd b/config/cobblerd
index cf97f4d..3beb3c7 100755
--- a/config/cobblerd
+++ b/config/cobblerd
@@ -54,7 +54,7 @@ start() {
startproc -f -p /var/run/$SERVICE.pid /usr/bin/cobblerd $CONFIG_ARGS
rc_status -v
else
- daemon --check $SERVICE $PROCESS --daemon $CONFIG_ARGS
+ daemon --check $SERVICE $PROCESS --daemonize $CONFIG_ARGS
fi
RETVAL=$?
echo
diff --git a/scripts/cobblerd b/scripts/cobblerd
index 3a47646..37fa44a 100755
--- a/scripts/cobblerd
+++ b/scripts/cobblerd
@@ -21,6 +21,8 @@ import cobbler.cobblerd as app
import logging
import cobbler.utils as utils
+import optparse
+
#logger = logging.getLogger("cobbler.cobblerd")
#logger.setLevel(logging.DEBUG)
#ch = logging.FileHandler("/var/log/cobbler/cobblerd.log")
@@ -29,13 +31,7 @@ import cobbler.utils as utils
#ch.setFormatter(formatter)
#logger.addHandler(ch)
-api = bootapi.BootAPI()
-logger = api.logger_remote
-
-if __name__ == "__main__":
-
- #############################################
-
+def daemonize_self(logger):
# daemonizing code: http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012
logger.info("cobblerd started")
try:
@@ -69,10 +65,38 @@ if __name__ == "__main__":
os.dup2(dev_null.fileno(), sys.stdout.fileno())
os.dup2(dev_null.fileno(), sys.stderr.fileno())
- #################
+def main():
+ op = optparse.OptionParser()
+ op.set_defaults(daemonize=True, log_level=None)
+ op.add_option('-B', '--daemonize', dest='daemonize', action='store_true',
+ help='run in background (default)')
+ op.add_option('-F', '--no-daemonize', dest='daemonize', action='store_false',
+ help='run in foreground (do not daemonize)')
+ op.add_option('-f', '--log-file', dest='log_file', metavar='NAME',
+ help='file to log to')
+ op.add_option('-l', '--log-level', dest='log_level', metavar='LEVEL',
+ help='log level (ie. INFO, WARNING, ERROR, CRITICAL)')
+
+ options, args = op.parse_args()
+
+ log_settings = {}
+ if options.log_file:
+ log_settings['log_file'] = options.log_file
+ if options.log_level:
+ log_level = logging.getLevelName(options.log_level)
+ if not isinstance(log_level, int):
+ op.error('Unrecognized log level %r given')
+ log_settings['log_level'] = log_level
+ api = bootapi.BootAPI(log_settings=log_settings)
+ logger = api.logger
+
+ if options.daemonize:
+ daemonize_self(logger)
try:
app.core(logger=logger)
except:
utils.log_exc(logger)
+if __name__ == "__main__":
+ main()
_______________________________________________
cobbler mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/cobbler