comparison plugins/mod_posix.lua @ 1034:2b0aba0bb013

Merge with 0.4.1
author Matthew Wild <mwild1@gmail.com>
date Wed, 22 Apr 2009 20:14:11 +0100
parents 4a9f0d482028
children a3d77353c18a 06887b889b17
comparison
equal deleted inserted replaced
1025:efd71cae24ea 1034:2b0aba0bb013
12 local config_get = require "core.configmanager".get; 12 local config_get = require "core.configmanager".get;
13 local logger_set = require "util.logger".setwriter; 13 local logger_set = require "util.logger".setwriter;
14 14
15 module.host = "*"; -- we're a global module 15 module.host = "*"; -- we're a global module
16 16
17 local pidfile_written;
18
19 local function remove_pidfile()
20 if pidfile_written then
21 os.remove(pidfile);
22 pidfile_written = nil;
23 end
24 end
25
17 local function write_pidfile() 26 local function write_pidfile()
27 if pidfile_written then
28 remove_pidfile();
29 end
18 local pidfile = config.get("*", "core", "pidfile"); 30 local pidfile = config.get("*", "core", "pidfile");
19 if pidfile then 31 if pidfile then
20 local pf, err = io.open(pidfile, "w+"); 32 local pf, err = io.open(pidfile, "w+");
21 if not pf then 33 if not pf then
22 log("error", "Couldn't write pidfile; %s", err); 34 log("error", "Couldn't write pidfile; %s", err);
23 else 35 else
24 pf:write(tostring(pposix.getpid())); 36 pf:write(tostring(pposix.getpid()));
25 pf:close(); 37 pf:close();
38 pidfile_written = pidfile;
26 end 39 end
27 end 40 end
28 end 41 end
29 42
30 local logfilename = config_get("*", "core", "log"); 43 local syslog_opened
31 if logfilename == "syslog" then 44 function syslog_sink_maker(config)
32 pposix.syslog_open("prosody"); 45 if not syslog_opened then
33 pposix.syslog_setminlevel(config.get("*", "core", "minimum_log_level") or "info"); 46 print("OPENING SYSLOOOOOOOOOG");
34 local syslog, format = pposix.syslog_log, string.format; 47 pposix.syslog_open("prosody");
35 logwriter = function (name, level, message, ...) 48 syslog_opened = true;
36 if ... then
37 syslog(level, format(message, ...));
38 else
39 syslog(level, message);
40 end
41 end;
42 elseif logfilename then
43 local logfile = io.open(logfilename, "a+");
44 if logfile then
45 local write, format, flush = logfile.write, string.format, logfile.flush;
46 logwriter = function (name, level, message, ...)
47 if ... then
48 write(logfile, name, "\t", level, "\t", format(message, ...), "\n");
49 else
50 write(logfile, name, "\t" , level, "\t", message, "\n");
51 end
52 flush(logfile);
53 end;
54 end 49 end
55 else 50 local syslog, format = pposix.syslog_log, string.format;
56 log("debug", "No logging specified, will continue with default"); 51 return function (name, level, message, ...)
52 if ... then
53 syslog(level, format(message, ...));
54 else
55 syslog(level, message);
56 end
57 end;
57 end 58 end
58 59 require "core.loggingmanager".register_sink_type("syslog", syslog_sink_maker);
59 if logwriter then
60 local ok, ret = logger_set(logwriter);
61 if not ok then
62 log("error", "Couldn't set new log output: %s", ret);
63 end
64 end
65 60
66 if not config_get("*", "core", "no_daemonize") then 61 if not config_get("*", "core", "no_daemonize") then
67 local function daemonize_server() 62 local function daemonize_server()
68 local logwriter;
69
70
71 local ok, ret = pposix.daemonize(); 63 local ok, ret = pposix.daemonize();
72 if not ok then 64 if not ok then
73 log("error", "Failed to daemonize: %s", ret); 65 log("error", "Failed to daemonize: %s", ret);
74 elseif ret and ret > 0 then 66 elseif ret and ret > 0 then
75 os.exit(0); 67 os.exit(0);
78 write_pidfile(); 70 write_pidfile();
79 end 71 end
80 end 72 end
81 module:add_event_hook("server-starting", daemonize_server); 73 module:add_event_hook("server-starting", daemonize_server);
82 else 74 else
75 -- Not going to daemonize, so write the pid of this process
83 write_pidfile(); 76 write_pidfile();
84 -- Not going to daemonize, but let's write the pidfile anyway
85 end 77 end
78
79 module:add_event_hook("server-stopped", remove_pidfile);
86 80
87 -- Set signal handler 81 -- Set signal handler
88 if signal.signal then 82 if signal.signal then
89 signal.signal("SIGTERM", function () 83 signal.signal("SIGTERM", function ()
90 log("warn", "Received SIGTERM..."); 84 log("warn", "Received SIGTERM...");