我发现postgresql v9.0.7在启动时默认以bg模式运行(命令如下)。早些时候,当我们使用 postgresql v7.4.2 时,它曾经在前台模式下运行。
我使用的是freebsd 8.2 64位环境。Postgresql v9.0.7 是使用 WITHOUT_XML、 WITHOUT_GETTEXT 和 WITHOUT_GNUGEOPT 选项集构建的。
c670e04:rkananth 16] /usr/local/bin/postgres --version postgres (PostgreSQL) 9.0.7
c670e04:rkananth 7] setenv PGDATA /data/db/postgres/
c670e04:rkananth 11] /data/bin/runas pgsql /usr/local/bin/postgres
c670e04:rkananth 12] ps -A | grep post
65165 ?? Ss 0:00.01 /usr/local/bin/postgres
65167 ?? Ss 0:00.00 postgres: writer process (postgres)
65168 ?? Ss 0:00.00 postgres: wal writer process (postgres)
65169 ?? Ss 0:00.00 postgres: autovacuum launcher process (postgres)
65170 ?? Ss 0:00.00 postgres: stats collector process (postgres)
65224 0 S+ 0:00.00 grep post
c670e04:rkananth 14] ps -p 65165 -o ppid
PPID
1
c670e04:rkananth 15] ps 1
PID TT STAT TIME COMMAND
1 ?? SLs 0:00.17 /sbin/init --
c670e04:rkananth 16]
有什么办法可以强制它出现在前台?
还查看上面的日志,它显示服务器进程的父进程设置为 1(初始化)是服务器在 bg 模式下运行时的预期行为吗?
但是 9.0.7 的文档说默认情况下它应该出现在前台。为什么在我的情况下没有发生这种情况,可能是一个错误?
更新 1: /data/bin/runas 没有引入任何行为更改,没有它进行测试。在 v8.3 和 Freebsd 7.2 32 位环境中也可以看到相同的行为。
服务器进程成为 PID 1 ( init ) 的子进程看起来就像任何应用程序作为守护进程运行的标准行为。
我现在的问题是 - 有没有办法可以指示 Postgres 不要作为守护进程运行?
更新 2: 得到的解决方案是配置“silent_mode = off”(默认情况下它是打开的)将使其在前台运行,并且进程作为 shell 的子进程运行。有了这个问题就回答了。(来源 - http://postgresql.1045698.n5.nabble.com/BUG-4381-Postgresql-daemon-won-t-stay-in-the-foreground-td2127518.html)