Software /
code /
prosody
Changeset
587:43f509a1519a
Add mod_posix, fixes #5
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 06 Dec 2008 23:21:55 +0000 |
parents | 586:b828d7d47973 |
children | 588:e743cb742ca6 |
files | plugins/mod_posix.lua |
diffstat | 1 files changed, 50 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /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