Обсуждение: pg_ctl start doesn't daemonize properly

Поиск
Список
Период
Сортировка

pg_ctl start doesn't daemonize properly

От
"Dennis, Allan"
Дата:
I am having problems getting pg_ctl to detach from the controlling terminal so that it's a proper daemon. I am running
pg_ctl start -w -s -l $logfile within a script, which is invoked from an automated test framework written in python. If the python process is stopped by Ctrl-C, postgres dies. But the documentation for pg_ctl says "pg_ctl encapsulates tasks such as redirecting log output and properly detaching from the terminal and process group" and "if no log file is chosen, the standard output of pg_ctl should be redirected to a file or piped to another process such as a log rotating program like rotatelogs; otherwise postgres will write its output to the controlling terminal (from the background) and will not leave the shell's process group." I think I am doing what is necessary here -- you can see that I am specifying the logfile in the invocation. So why do all the postmaster processes die when I Ctrl-C the python process? Is there any way to get insight into what's happening here?
 
Allan

Re: pg_ctl start doesn't daemonize properly

От
"Dennis, Allan"
Дата:
> I am having problems getting pg_ctl to detach from the controlling
terminal
> so that it's a proper daemon.

I figured out the problem, and record it here in hopes that it will help
others.

The silent_mode setting was not on, so postmaster initialization was not
calling setsid(), which is a necessary step to dissociate from the
controlling terminal (and thereby gain immunity from Ctrl-C on parent
processes). The logging setup I have (stdout logged to a specified
logfile and stderr redirected) seems to still work, despite the warnings
to the contrary in the config file template. I don't know why proper
daemonization is linked to being in "silent_mode", but... there you go.

Thanks for making the source code online, google-searchable, and
cross-referenced by doxygen -- I would have been stuck much longer
otherwise.

Allan