Software /
code /
prosody
Annotate
plugins/mod_posix.lua @ 11432:113f3912c7cb
util: Add Teal interface definition files
Enables writing code in Teal that is aware of the interfaces and
function prototypes in these other utils.
Could also be used to do type checks on Lua sources, but this tends to
have a lot of noise.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Tue, 09 Mar 2021 14:36:46 +0100 |
parent | 11179:96da09c771a1 |
child | 11830:7fe2fbfbdb1c |
rev | line source |
---|---|
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
1 -- Prosody IM |
2923
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2795
diff
changeset
|
2 -- Copyright (C) 2008-2010 Matthew Wild |
b7049746bd29
Update copyright headers for 2010
Matthew Wild <mwild1@gmail.com>
parents:
2795
diff
changeset
|
3 -- Copyright (C) 2008-2010 Waqas Hussain |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5452
diff
changeset
|
4 -- |
1522
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
5 -- This project is MIT/X11 licensed. Please see the |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
6 -- COPYING file in the source package for more information. |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
7 -- |
569d58d21612
Add copyright header to those files missing one
Matthew Wild <mwild1@gmail.com>
parents:
1238
diff
changeset
|
8 |
728
fa45dfb27ee5
mod_posix: Check version of pposix
Matthew Wild <mwild1@gmail.com>
parents:
723
diff
changeset
|
9 |
8012 | 10 local want_pposix_version = "0.4.0"; |
587 | 11 |
12 local pposix = assert(require "util.pposix"); | |
5452
edf3db386a19
mod_posix: Improve error message for a pposix version mismatch
Matthew Wild <mwild1@gmail.com>
parents:
5451
diff
changeset
|
13 if pposix._VERSION ~= want_pposix_version then |
8166
bbedf564b9f9
mod_posix: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8116
diff
changeset
|
14 module:log("warn", "Unknown version (%s) of binary pposix module, expected %s." |
bbedf564b9f9
mod_posix: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents:
8116
diff
changeset
|
15 .. "Perhaps you need to recompile?", tostring(pposix._VERSION), want_pposix_version); |
5452
edf3db386a19
mod_posix: Improve error message for a pposix version mismatch
Matthew Wild <mwild1@gmail.com>
parents:
5451
diff
changeset
|
16 end |
587 | 17 |
6875
12d68f7b1be0
mod_posix: Detect failure to load util.signal by first pcall return value not by type of the second
Kim Alvefur <zash@zash.se>
parents:
6874
diff
changeset
|
18 local have_signal, signal = pcall(require, "util.signal"); |
12d68f7b1be0
mod_posix: Detect failure to load util.signal by first pcall return value not by type of the second
Kim Alvefur <zash@zash.se>
parents:
6874
diff
changeset
|
19 if not have_signal then |
1062
f9a1ac50782b
mod_posix: Fix calls to log() (replace with module:log) and make some global accesses explicit
Matthew Wild <mwild1@gmail.com>
parents:
1061
diff
changeset
|
20 module:log("warn", "Couldn't load signal library, won't respond to SIGTERM"); |
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
21 end |
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
22 |
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
23 local lfs = require "lfs"; |
2795
d6fcd13c07e7
mod_posix: Adjust file open mode depending on whether file exists (take that fopen designers!!!)
Matthew Wild <mwild1@gmail.com>
parents:
2793
diff
changeset
|
24 local stat = lfs.attributes; |
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
25 |
1238
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
26 local prosody = _G.prosody; |
f4c08caca3e7
mod_posix: Use global prosody object
Matthew Wild <mwild1@gmail.com>
parents:
1119
diff
changeset
|
27 |
4623
403b56b78018
mod_posix, mod_bosh, mod_admin_telnet: Use module:set_global()
Kim Alvefur <zash@zash.se>
parents:
3555
diff
changeset
|
28 module:set_global(); -- we're a global module |
587 | 29 |
7731
a0ee83c4a82c
mod_posix: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents:
6875
diff
changeset
|
30 local umask = module:get_option_string("umask", "027"); |
2440
11e3d16a128f
mod_posix: Set umask to 'umask' from the config, or 027
Matthew Wild <mwild1@gmail.com>
parents:
2438
diff
changeset
|
31 pposix.umask(umask); |
11e3d16a128f
mod_posix: Set umask to 'umask' from the config, or 027
Matthew Wild <mwild1@gmail.com>
parents:
2438
diff
changeset
|
32 |
1092
b547967d87fc
mod_posix: Don't let the server run as root without the magic run_as_root in config
Matthew Wild <mwild1@gmail.com>
parents:
1062
diff
changeset
|
33 -- Don't even think about it! |
3022
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
34 if not prosody.start_time then -- server-starting |
11047
93cdd1ece689
mod_posix: Remove ancient undocumented user switching
Kim Alvefur <zash@zash.se>
parents:
10628
diff
changeset
|
35 if pposix.getuid() == 0 and not module:get_option_boolean("run_as_root") then |
93cdd1ece689
mod_posix: Remove ancient undocumented user switching
Kim Alvefur <zash@zash.se>
parents:
10628
diff
changeset
|
36 module:log("error", "Danger, Will Robinson! Prosody doesn't need to be run as root, so don't do it!"); |
93cdd1ece689
mod_posix: Remove ancient undocumented user switching
Kim Alvefur <zash@zash.se>
parents:
10628
diff
changeset
|
37 module:log("error", "For more information on running Prosody as root, see https://prosody.im/doc/root"); |
93cdd1ece689
mod_posix: Remove ancient undocumented user switching
Kim Alvefur <zash@zash.se>
parents:
10628
diff
changeset
|
38 prosody.shutdown("Refusing to run as root"); |
3022
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
39 end |
948d511f479c
mod_posix: Don't add a server-starting event handler while the server-starting event is being fired.
Waqas Hussain <waqas20@gmail.com>
parents:
2925
diff
changeset
|
40 end |
1092
b547967d87fc
mod_posix: Don't let the server run as root without the magic run_as_root in config
Matthew Wild <mwild1@gmail.com>
parents:
1062
diff
changeset
|
41 |
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
42 local pidfile; |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
43 local pidfile_handle; |
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
44 |
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
45 local function remove_pidfile() |
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
46 if pidfile_handle then |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
47 pidfile_handle:close(); |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
48 os.remove(pidfile); |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
49 pidfile, pidfile_handle = nil, nil; |
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
50 end |
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
51 end |
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
52 |
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
53 local function write_pidfile() |
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
54 if pidfile_handle then |
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
55 remove_pidfile(); |
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
56 end |
7992
51396e0836cf
mod_posix: Use path variant of config API for pidfile option
Kim Alvefur <zash@zash.se>
parents:
7731
diff
changeset
|
57 pidfile = module:get_option_path("pidfile", nil, "data"); |
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
58 if pidfile then |
3026
dec4527a7499
mod_posix: Fixed a global access.
Waqas Hussain <waqas20@gmail.com>
parents:
2923
diff
changeset
|
59 local err; |
2795
d6fcd13c07e7
mod_posix: Adjust file open mode depending on whether file exists (take that fopen designers!!!)
Matthew Wild <mwild1@gmail.com>
parents:
2793
diff
changeset
|
60 local mode = stat(pidfile) and "r+" or "w+"; |
d6fcd13c07e7
mod_posix: Adjust file open mode depending on whether file exists (take that fopen designers!!!)
Matthew Wild <mwild1@gmail.com>
parents:
2793
diff
changeset
|
61 pidfile_handle, err = io.open(pidfile, mode); |
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
62 if not pidfile_handle then |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
63 module:log("error", "Couldn't write pidfile at %s; %s", pidfile, err); |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
64 prosody.shutdown("Couldn't write pidfile"); |
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
65 else |
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
66 if not lfs.lock(pidfile_handle, "w") then -- Exclusive lock |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
67 local other_pid = pidfile_handle:read("*a"); |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
68 module:log("error", "Another Prosody instance seems to be running with PID %s, quitting", other_pid); |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
69 pidfile_handle = nil; |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
70 prosody.shutdown("Prosody already running"); |
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
71 else |
3341
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
72 pidfile_handle:close(); |
3340
0769cc5f34b6
mod_posix: Truncate the pidfile before writing to ensure that we never overwrite with a PID shorter than the previous, and end with an invalid PID in the file.
Brian Cully <bjc@junctionnetworks.com>
parents:
3029
diff
changeset
|
73 pidfile_handle, err = io.open(pidfile, "w+"); |
0769cc5f34b6
mod_posix: Truncate the pidfile before writing to ensure that we never overwrite with a PID shorter than the previous, and end with an invalid PID in the file.
Brian Cully <bjc@junctionnetworks.com>
parents:
3029
diff
changeset
|
74 if not pidfile_handle then |
0769cc5f34b6
mod_posix: Truncate the pidfile before writing to ensure that we never overwrite with a PID shorter than the previous, and end with an invalid PID in the file.
Brian Cully <bjc@junctionnetworks.com>
parents:
3029
diff
changeset
|
75 module:log("error", "Couldn't write pidfile at %s; %s", pidfile, err); |
0769cc5f34b6
mod_posix: Truncate the pidfile before writing to ensure that we never overwrite with a PID shorter than the previous, and end with an invalid PID in the file.
Brian Cully <bjc@junctionnetworks.com>
parents:
3029
diff
changeset
|
76 prosody.shutdown("Couldn't write pidfile"); |
3341
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
77 else |
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
78 if lfs.lock(pidfile_handle, "w") then |
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
79 pidfile_handle:write(tostring(pposix.getpid())); |
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
80 pidfile_handle:flush(); |
a8a3e662fea7
mod_posix: Some (perhaps temporary) changes to re-lock the pidfile after truncating, to avoid breaking prosodyctl
Matthew Wild <mwild1@gmail.com>
parents:
3340
diff
changeset
|
81 end |
3340
0769cc5f34b6
mod_posix: Truncate the pidfile before writing to ensure that we never overwrite with a PID shorter than the previous, and end with an invalid PID in the file.
Brian Cully <bjc@junctionnetworks.com>
parents:
3029
diff
changeset
|
82 end |
2793
08892e3f24bd
mod_posix: Lock pidfile when in use, shut down if we can't write or lock the pidfile
Matthew Wild <mwild1@gmail.com>
parents:
2074
diff
changeset
|
83 end |
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
84 end |
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
85 end |
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
86 end |
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
87 |
10598
5cf481bee678
mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents:
9763
diff
changeset
|
88 local daemonize = prosody.opts.daemonize; |
5cf481bee678
mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents:
9763
diff
changeset
|
89 |
5cf481bee678
mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents:
9763
diff
changeset
|
90 if daemonize == nil then |
5cf481bee678
mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents:
9763
diff
changeset
|
91 -- Fall back to config file if not specified on command-line |
10628
25e178edbc2c
mod_posix: Add deprecation warning for the 'daemonize' option
Kim Alvefur <zash@zash.se>
parents:
10599
diff
changeset
|
92 daemonize = module:get_option_boolean("daemonize", nil); |
25e178edbc2c
mod_posix: Add deprecation warning for the 'daemonize' option
Kim Alvefur <zash@zash.se>
parents:
10599
diff
changeset
|
93 if daemonize ~= nil then |
25e178edbc2c
mod_posix: Add deprecation warning for the 'daemonize' option
Kim Alvefur <zash@zash.se>
parents:
10599
diff
changeset
|
94 module:log("warn", "The 'daemonize' option has been deprecated, specify -D or -F on the command line instead."); |
25e178edbc2c
mod_posix: Add deprecation warning for the 'daemonize' option
Kim Alvefur <zash@zash.se>
parents:
10599
diff
changeset
|
95 -- TODO: Write some docs and include a link in the warning. |
25e178edbc2c
mod_posix: Add deprecation warning for the 'daemonize' option
Kim Alvefur <zash@zash.se>
parents:
10599
diff
changeset
|
96 end |
10598
5cf481bee678
mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents:
9763
diff
changeset
|
97 end |
2073
72784ce0c0e0
mod_posix: Switch config option to 'daemonize', fall back to 'no_daemonize' if not set, default behaviour remains the same... daemonize if mod_posix is loaded
Matthew Wild <mwild1@gmail.com>
parents:
1712
diff
changeset
|
98 |
5175
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
99 local function remove_log_sinks() |
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
100 local lm = require "core.loggingmanager"; |
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
101 lm.register_sink_type("console", nil); |
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
102 lm.register_sink_type("stdout", nil); |
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
103 lm.reload_logging(); |
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
104 end |
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
105 |
2073
72784ce0c0e0
mod_posix: Switch config option to 'daemonize', fall back to 'no_daemonize' if not set, default behaviour remains the same... daemonize if mod_posix is loaded
Matthew Wild <mwild1@gmail.com>
parents:
1712
diff
changeset
|
106 if daemonize then |
587 | 107 local function daemonize_server() |
5177
add9ad38208e
mod_posix: Log a message explaining that we are detaching from the console
Kim Alvefur <zash@zash.se>
parents:
5175
diff
changeset
|
108 module:log("info", "Prosody is about to detach from the console, disabling further console output"); |
5175
fabaed7418a6
mod_posix: Remove console and stdout logging sinks before daemonizing
Kim Alvefur <zash@zash.se>
parents:
4993
diff
changeset
|
109 remove_log_sinks(); |
587 | 110 local ok, ret = pposix.daemonize(); |
111 if not ok then | |
1062
f9a1ac50782b
mod_posix: Fix calls to log() (replace with module:log) and make some global accesses explicit
Matthew Wild <mwild1@gmail.com>
parents:
1061
diff
changeset
|
112 module:log("error", "Failed to daemonize: %s", ret); |
587 | 113 elseif ret and ret > 0 then |
114 os.exit(0); | |
115 else | |
1062
f9a1ac50782b
mod_posix: Fix calls to log() (replace with module:log) and make some global accesses explicit
Matthew Wild <mwild1@gmail.com>
parents:
1061
diff
changeset
|
116 module:log("info", "Successfully daemonized to PID %d", pposix.getpid()); |
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
117 write_pidfile(); |
587 | 118 end |
119 end | |
11062 | 120 module:hook("server-started", daemonize_server) |
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
121 else |
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
122 -- Not going to daemonize, so write the pid of this process |
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
123 write_pidfile(); |
587 | 124 end |
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
125 |
3537
7bbb19804d82
mod_posix: Updated to use the new events API.
Waqas Hussain <waqas20@gmail.com>
parents:
3481
diff
changeset
|
126 module:hook("server-stopped", remove_pidfile); |
1032
409f22d0430f
mod_posix: Remove pidfile on exit
Matthew Wild <mwild1@gmail.com>
parents:
991
diff
changeset
|
127 |
1118
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
128 -- Set signal handlers |
6875
12d68f7b1be0
mod_posix: Detect failure to load util.signal by first pcall return value not by type of the second
Kim Alvefur <zash@zash.se>
parents:
6874
diff
changeset
|
129 if have_signal then |
8663
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
130 module:add_timer(0, function () |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
131 signal.signal("SIGTERM", function () |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
132 module:log("warn", "Received SIGTERM"); |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
133 prosody.unlock_globals(); |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
134 prosody.shutdown("Received SIGTERM"); |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
135 prosody.lock_globals(); |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
136 end); |
1118
239d4362a040
mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents:
1092
diff
changeset
|
137 |
8663
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
138 signal.signal("SIGHUP", function () |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
139 module:log("info", "Received SIGHUP"); |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
140 prosody.reload_config(); |
9763
982529dd0bed
mod_posix: Don't reload logging twice
Kim Alvefur <zash@zash.se>
parents:
8663
diff
changeset
|
141 -- this also reloads logging |
8663
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
142 end); |
5776
bd0ff8ae98a8
Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents:
5452
diff
changeset
|
143 |
8663
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
144 signal.signal("SIGINT", function () |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
145 module:log("info", "Received SIGINT"); |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
146 prosody.unlock_globals(); |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
147 prosody.shutdown("Received SIGINT"); |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
148 prosody.lock_globals(); |
a7a9d9511dc1
mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents:
8235
diff
changeset
|
149 end); |
11179
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
150 |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
151 signal.signal("SIGUSR1", function () |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
152 module:log("info", "Received SIGUSR1"); |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
153 module:fire_event("signal/SIGUSR1"); |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
154 end); |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
155 |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
156 signal.signal("SIGUSR2", function () |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
157 module:log("info", "Received SIGUSR2"); |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
158 module:fire_event("signal/SIGUSR2"); |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
159 end); |
2332 | 160 end); |
991
cd0d75de8345
mod_posix: Allow logging and pidfile options to take effect without needing to daemonize. Add the ability to catch SIGTERM.
Matthew Wild <mwild1@gmail.com>
parents:
735
diff
changeset
|
161 end |
11179
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
162 |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
163 -- For other modules to reference |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
164 features = { |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
165 signal_events = true; |
96da09c771a1
mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents:
11062
diff
changeset
|
166 }; |