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