diff --git a/include/haproxy/global.h b/include/haproxy/global.h index a5730bc4b6ba..ba0523cbf911 100644 --- a/include/haproxy/global.h +++ b/include/haproxy/global.h @@ -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); diff --git a/src/cli.c b/src/cli.c index 506e5e45c4d9..429a277dc2aa 100644 --- a/src/cli.c +++ b/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; } diff --git a/src/haproxy.c b/src/haproxy.c index 7b03e9ed8992..0d7f784d2754 100644 --- a/src/haproxy.c +++ b/src/haproxy.c @@ -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 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 */ }