mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 23:27:04 +02:00
BUG/MINOR: mworker: detach from tty when received READY from worker
Some master process' initialization steps are conditioned by receiving the READY message from worker (pidfile creation, forwarding READY message to the launching parent). So, master process can not do these initialization routines before. If the master process fails, while creating pid or forwarding the READY to the parent in daemon mode, he exits with a proper alert message. In daemon mode we no longer see such message, as process is already detached from the tty. To fix this, as these alerts could be very useful, let's detach the master process from the tty after his last initialization steps in _send_status.
This commit is contained in:
parent
97aaf76716
commit
1f63a53955
@ -70,6 +70,7 @@ int split_version(const char *version, unsigned int *value);
|
||||
int compare_current_version(const char *version);
|
||||
void display_version();
|
||||
int handle_pidfile(void);
|
||||
void stdio_quiet(int fd);
|
||||
|
||||
void mworker_accept_wrapper(int fd);
|
||||
|
||||
|
12
src/cli.c
12
src/cli.c
@ -2553,6 +2553,18 @@ static int _send_status(char **args, char *payload, struct appctx *appctx, void
|
||||
if (global.tune.options & GTUNE_USE_SYSTEMD)
|
||||
sd_notifyf(0, "READY=1\nMAINPID=%lu\nSTATUS=Ready.\n", (unsigned long)getpid());
|
||||
|
||||
/* master and worker have successfully started, now we can set quiet mode
|
||||
* if MODE_DAEMON
|
||||
*/
|
||||
if ((!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)) &&
|
||||
(global.mode & MODE_DAEMON)) {
|
||||
/* detach from the tty, this is required to properly daemonize. */
|
||||
if ((getenv("HAPROXY_MWORKER_REEXEC") == NULL))
|
||||
stdio_quiet(-1);
|
||||
global.mode &= ~MODE_VERBOSE;
|
||||
global.mode |= MODE_QUIET; /* ensure that we won't say anything from now */
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -814,7 +814,7 @@ static void dump(struct sig_handler *sh)
|
||||
* In the case of chrooting, you have to open /dev/null before the chroot, and
|
||||
* pass the <fd> to this function
|
||||
*/
|
||||
static void stdio_quiet(int fd)
|
||||
void stdio_quiet(int fd)
|
||||
{
|
||||
if (fd < 0)
|
||||
fd = open("/dev/null", O_RDWR, 0);
|
||||
@ -3533,15 +3533,6 @@ int main(int argc, char **argv)
|
||||
|
||||
/* Master enters in its polling loop */
|
||||
if (master) {
|
||||
/* set quiet mode if MODE_DAEMON */
|
||||
if ((!(global.mode & MODE_QUIET) || (global.mode & MODE_VERBOSE)) &&
|
||||
(global.mode & MODE_DAEMON)) {
|
||||
/* detach from the tty, this is required to properly daemonize. */
|
||||
if ((getenv("HAPROXY_MWORKER_REEXEC") == NULL))
|
||||
stdio_quiet(-1);
|
||||
global.mode &= ~MODE_VERBOSE;
|
||||
global.mode |= MODE_QUIET; /* ensure that we won't say anything from now */
|
||||
}
|
||||
mworker_run_master();
|
||||
/* never get there in master context */
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user