From f7ea6beaf4ca02b8e6dc576255e35a5b86035cb9 Mon Sep 17 00:00:00 2001 From: Heikki Linnakangas Date: Mon, 4 Jul 2011 14:35:44 +0300 Subject: [PATCH] Remove silent_mode. You get the same functionality with "pg_ctl -l postmaster.log", or nohup. There was a small issue with LINUX_OOM_ADJ and silent_mode, namely that with silent_mode the postmaster process incorrectly used the OOM settings meant for backend processes. We certainly could've fixed that directly, but since silent_mode was redundant anyway, we might as well just remove it. --- doc/src/sgml/config.sgml | 30 ----- src/backend/postmaster/postmaster.c | 113 +----------------- src/backend/utils/misc/guc.c | 10 -- src/backend/utils/misc/postgresql.conf.sample | 5 - 4 files changed, 1 insertion(+), 157 deletions(-) diff --git a/doc/src/sgml/config.sgml b/doc/src/sgml/config.sgml index 3f6986fc1b..bce9520a65 100644 --- a/doc/src/sgml/config.sgml +++ b/doc/src/sgml/config.sgml @@ -3201,36 +3201,6 @@ local0.* /var/log/postgresql - - silent_mode (boolean) - - silent_mode configuration parameter - - - - Runs the server silently. If this parameter is set, the server - will automatically run in background and disassociate from the - controlling terminal. - This parameter can only be set at server start. - - - - - When this parameter is set, - the server's standard output and standard error are redirected - to the file postmaster.log within the data directory. - There is no provision for rotating this file, so it will grow - indefinitely unless server log output is redirected elsewhere - by other settings. It is recommended that log_destination - be set to syslog or that logging_collector be - enabled when using this option. Even with those measures, errors - reported early during startup may appear in - postmaster.log rather than the normal log destination. - - - - - diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c index 6572292a40..b9bd50c671 100644 --- a/src/backend/postmaster/postmaster.c +++ b/src/backend/postmaster/postmaster.c @@ -58,8 +58,7 @@ * Error Reporting: * Use write_stderr() only for reporting "interactive" errors * (essentially, bogus arguments on the command line). Once the - * postmaster is launched, use ereport(). In particular, don't use - * write_stderr() for anything that occurs after pmdaemonize. + * postmaster is launched, use ereport(). * *------------------------------------------------------------------------- */ @@ -192,7 +191,6 @@ static int SendStop = false; /* still more option variables */ bool EnableSSL = false; -bool SilentMode = false; /* silent_mode */ int PreAuthDelay = 0; int AuthenticationTimeout = 60; @@ -326,7 +324,6 @@ static DNSServiceRef bonjour_sdref = NULL; */ static void getInstallationPaths(const char *argv0); static void checkDataDir(void); -static void pmdaemonize(void); static Port *ConnCreate(int serverFd); static void ConnFree(Port *port); static void reset_shared(int port); @@ -777,15 +774,6 @@ PostmasterMain(int argc, char *argv[]) (errmsg_internal("-----------------------------------------"))); } - /* - * Fork away from controlling terminal, if silent_mode specified. - * - * Must do this before we grab any interlock files, else the interlocks - * will show the wrong PID. - */ - if (SilentMode) - pmdaemonize(); - /* * Create lockfile for data directory. * @@ -1270,105 +1258,6 @@ checkDataDir(void) FreeFile(fp); } - -/* - * Fork away from the controlling terminal (silent_mode option) - * - * Since this requires disconnecting from stdin/stdout/stderr (in case they're - * linked to the terminal), we re-point stdin to /dev/null and stdout/stderr - * to "postmaster.log" in the data directory, where we're already chdir'd. - */ -static void -pmdaemonize(void) -{ -#ifndef WIN32 - const char *pmlogname = "postmaster.log"; - int dvnull; - int pmlog; - pid_t pid; - int res; - - /* - * Make sure we can open the files we're going to redirect to. If this - * fails, we want to complain before disconnecting. Mention the full path - * of the logfile in the error message, even though we address it by - * relative path. - */ - dvnull = open(DEVNULL, O_RDONLY, 0); - if (dvnull < 0) - { - write_stderr("%s: could not open file \"%s\": %s\n", - progname, DEVNULL, strerror(errno)); - ExitPostmaster(1); - } - pmlog = open(pmlogname, O_CREAT | O_WRONLY | O_APPEND, S_IRUSR | S_IWUSR); - if (pmlog < 0) - { - write_stderr("%s: could not open log file \"%s/%s\": %s\n", - progname, DataDir, pmlogname, strerror(errno)); - ExitPostmaster(1); - } - - /* - * Okay to fork. - */ - pid = fork_process(); - if (pid == (pid_t) -1) - { - write_stderr("%s: could not fork background process: %s\n", - progname, strerror(errno)); - ExitPostmaster(1); - } - else if (pid) - { /* parent */ - /* Parent should just exit, without doing any atexit cleanup */ - _exit(0); - } - - MyProcPid = PostmasterPid = getpid(); /* reset PID vars to child */ - - MyStartTime = time(NULL); - - /* - * Some systems use setsid() to dissociate from the TTY's process group, - * while on others it depends on stdin/stdout/stderr. Do both if - * possible. - */ -#ifdef HAVE_SETSID - if (setsid() < 0) - { - write_stderr("%s: could not dissociate from controlling TTY: %s\n", - progname, strerror(errno)); - ExitPostmaster(1); - } -#endif - - /* - * Reassociate stdin/stdout/stderr. fork_process() cleared any pending - * output, so this should be safe. The only plausible error is EINTR, - * which just means we should retry. - */ - do - { - res = dup2(dvnull, 0); - } while (res < 0 && errno == EINTR); - close(dvnull); - do - { - res = dup2(pmlog, 1); - } while (res < 0 && errno == EINTR); - do - { - res = dup2(pmlog, 2); - } while (res < 0 && errno == EINTR); - close(pmlog); -#else /* WIN32 */ - /* not supported */ - elog(FATAL, "silent_mode is not supported under Windows"); -#endif /* WIN32 */ -} - - /* * Main idle loop of postmaster */ diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 6e85cb5335..c5782e2de2 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -824,16 +824,6 @@ static struct config_bool ConfigureNamesBool[] = true, NULL, NULL, NULL }, - { - {"silent_mode", PGC_POSTMASTER, LOGGING_WHERE, - gettext_noop("Runs the server silently."), - gettext_noop("If this parameter is set, the server will automatically run in the " - "background and any controlling terminals are dissociated.") - }, - &SilentMode, - false, - NULL, NULL, NULL - }, { {"log_checkpoints", PGC_SIGHUP, LOGGING_WHAT, gettext_noop("Logs each checkpoint."), diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 655dad42c7..229d0e86a9 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -300,11 +300,6 @@ #syslog_facility = 'LOCAL0' #syslog_ident = 'postgres' -#silent_mode = off # Run server silently. - # DO NOT USE without syslog or - # logging_collector - # (change requires restart) - # - When to Log - -- 2.40.0