# HG changeset patch # User Matthew Wild # Date 1228605715 0 # Node ID 43f509a1519a7c74c9229171ed05aec3592b231d # Parent b828d7d47973f5444f40b022421710c8792db725 Add mod_posix, fixes #5 diff -r b828d7d47973 -r 43f509a1519a plugins/mod_posix.lua --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/mod_posix.lua Sat Dec 06 23:21:55 2008 +0000 @@ -0,0 +1,50 @@ + +local pposix = assert(require "util.pposix"); + +local config_get = require "core.configmanager".get; +local logger_set = require "util.logger".setwriter; + +module.host = "*"; -- we're a global module + +if not config_get("*", "core", "no_daemonize") then + local function daemonize_server() + local logwriter; + + local logfilename = config_get("*", "core", "log"); + if logfilename then + local logfile = io.open(logfilename, "a+"); + if logfile then + local write, format, flush = logfile.write, string.format, logfile.flush; + logwriter = function (name, level, message, ...) + if ... then + write(logfile, name, "\t", level, "\t", format(message, ...), "\n"); + else + write(logfile, name, "\t" , level, "\t", message, "\n"); + end + flush(logfile); + end; + end + else + log("debug", "No logging specified, will continue with default"); + end + + local ok, ret = pposix.daemonize(); + if not ok then + log("error", "Failed to daemonize: %s", ret); + elseif ret and ret > 0 then + log("info", "Daemonized to pid %d", ret); + os.exit(0); + else + log("info", "Successfully daemonized"); + + if logwriter then + local ok, ret = logger_set(logwriter); + if not ok then + log("error", "Couldn't set new log output: %s", ret); + end + end + + end + end + module:add_event_hook("server-starting", daemonize_server); +end