plugins/mod_posix.lua
author Matthew Wild <mwild1@gmail.com>
Mon, 20 Feb 2023 18:10:15 +0000
branch0.12
changeset 12898 0598d822614f
parent 12301 249eb306f668
child 12981 74b9e05af71e
permissions -rw-r--r--
mod_websocket: Fire pre-session-close event (fixes #1800) This event was added in a7c183bb4e64 and is required to make mod_smacks know that a session was intentionally closed and shouldn't be hibernated (see fcea4d9e7502). Because this was missing from mod_websocket's session.close(), mod_smacks would always attempt to hibernate websocket sessions even if they closed cleanly. That mod_websocket has its own copy of session.close() is something to fix another day (probably not in the stable branch). So for now this commit makes the minimal change to get things working again. Thanks to Damian and the Jitsi team for reporting.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
8015
e898c8fda986 util.pposix: Remove fallocate
Kim Alvefur <zash@zash.se>
parents: 8013
diff changeset
    10
local want_pposix_version = "0.4.0";
587
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    11
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    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
8169
bbedf564b9f9 mod_posix: Split long line [luacheck]
Kim Alvefur <zash@zash.se>
parents: 8119
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: 8119
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
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    17
6878
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: 6877
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: 6877
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
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
    29
7734
a0ee83c4a82c mod_posix: Use type-specific config API
Kim Alvefur <zash@zash.se>
parents: 6878
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
11051
93cdd1ece689 mod_posix: Remove ancient undocumented user switching
Kim Alvefur <zash@zash.se>
parents: 10632
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: 10632
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: 10632
diff changeset
    37
		module:log("error", "For more information on running Prosody as root, see https://prosody.im/doc/root");
11834
7fe2fbfbdb1c mod_posix: Exit with non-zero status code on problems
Kim Alvefur <zash@zash.se>
parents: 11183
diff changeset
    38
		prosody.shutdown("Refusing to run as root", 1);
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
7995
51396e0836cf mod_posix: Use path variant of config API for pidfile option
Kim Alvefur <zash@zash.se>
parents: 7734
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);
11834
7fe2fbfbdb1c mod_posix: Exit with non-zero status code on problems
Kim Alvefur <zash@zash.se>
parents: 11183
diff changeset
    64
			prosody.shutdown("Couldn't write pidfile", 1);
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;
11834
7fe2fbfbdb1c mod_posix: Exit with non-zero status code on problems
Kim Alvefur <zash@zash.se>
parents: 11183
diff changeset
    70
				prosody.shutdown("Prosody already running", 1);
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
    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);
11834
7fe2fbfbdb1c mod_posix: Exit with non-zero status code on problems
Kim Alvefur <zash@zash.se>
parents: 11183
diff changeset
    76
					prosody.shutdown("Couldn't write pidfile", 1);
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
10602
5cf481bee678 mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents: 9767
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: 9767
diff changeset
    89
5cf481bee678 mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents: 9767
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: 9767
diff changeset
    91
	-- Fall back to config file if not specified on command-line
10632
25e178edbc2c mod_posix: Add deprecation warning for the 'daemonize' option
Kim Alvefur <zash@zash.se>
parents: 10603
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: 10603
diff changeset
    93
	if daemonize ~= nil then
25e178edbc2c mod_posix: Add deprecation warning for the 'daemonize' option
Kim Alvefur <zash@zash.se>
parents: 10603
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: 10603
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: 10603
diff changeset
    96
	end
10602
5cf481bee678 mod_posix: Support for command-line flags to override 'daemonize' config option
Matthew Wild <mwild1@gmail.com>
parents: 9767
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
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   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
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   110
		local ok, ret = pposix.daemonize();
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   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
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   113
		elseif ret and ret > 0 then
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   114
			os.exit(0);
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   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
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   118
		end
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   119
	end
11066
dd3b1b9d867d mod_posix: Daemonize later
Kim Alvefur <zash@zash.se>
parents: 11051
diff changeset
   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
43f509a1519a Add mod_posix, fixes #5
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
   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
6878
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: 6877
diff changeset
   129
if have_signal then
8666
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8238
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: 8238
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: 8238
diff changeset
   132
			module:log("warn", "Received SIGTERM");
12301
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   133
			prosody.main_thread:run(function ()
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   134
				prosody.unlock_globals();
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   135
				prosody.shutdown("Received SIGTERM");
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   136
				prosody.lock_globals();
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   137
			end);
8666
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8238
diff changeset
   138
		end);
1118
239d4362a040 mod_posix: Reload the config and reopen log files on SIGHUP
Matthew Wild <mwild1@gmail.com>
parents: 1092
diff changeset
   139
8666
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8238
diff changeset
   140
		signal.signal("SIGHUP", function ()
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8238
diff changeset
   141
			module:log("info", "Received SIGHUP");
12301
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   142
			prosody.main_thread:run(function ()
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   143
				prosody.reload_config();
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   144
			end);
9767
982529dd0bed mod_posix: Don't reload logging twice
Kim Alvefur <zash@zash.se>
parents: 8666
diff changeset
   145
			-- this also reloads logging
8666
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8238
diff changeset
   146
		end);
5776
bd0ff8ae98a8 Remove all trailing whitespace
Florian Zeitz <florob@babelmonkeys.de>
parents: 5452
diff changeset
   147
8666
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8238
diff changeset
   148
		signal.signal("SIGINT", function ()
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8238
diff changeset
   149
			module:log("info", "Received SIGINT");
12301
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   150
			prosody.main_thread:run(function ()
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   151
				prosody.unlock_globals();
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   152
				prosody.shutdown("Received SIGINT");
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   153
				prosody.lock_globals();
249eb306f668 mod_posix: Run signal handlers in the startup thread
Kim Alvefur <zash@zash.se>
parents: 11834
diff changeset
   154
			end);
8666
a7a9d9511dc1 mod_posix: Delay setting signal handlers until in the main thread
Matthew Wild <mwild1@gmail.com>
parents: 8238
diff changeset
   155
		end);
11183
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   156
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   157
		signal.signal("SIGUSR1", function ()
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   158
			module:log("info", "Received SIGUSR1");
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   159
			module:fire_event("signal/SIGUSR1");
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   160
		end);
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   161
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   162
		signal.signal("SIGUSR2", function ()
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   163
			module:log("info", "Received SIGUSR2");
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   164
			module:fire_event("signal/SIGUSR2");
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   165
		end);
2332
7772dde4010b mod_posix: Catch SIGINT
Matthew Wild <mwild1@gmail.com>
parents: 2074
diff changeset
   166
	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
   167
end
11183
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   168
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   169
-- For other modules to reference
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   170
features = {
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   171
	signal_events = true;
96da09c771a1 mod_posix: Hook and fire events on SIGUSR1/2
Matthew Wild <mwild1@gmail.com>
parents: 11066
diff changeset
   172
};