我发现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(init)是服务器在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)
答案 0 :(得分:2)
确实,postgres
应该保留在前台,如联机帮助页中所述:
默认情况下,postgres在前台启动并打印日志 消息到标准错误流。在实际应用中 postgres应该作为后台进程启动,也许在 开机时间。
runas
命令很可能是守护postgres
进程的命令。尝试从postgres
用户开始的shell中运行pgsql
:
root# su - pgsql
pgsql$ setenv PGDATA /data/db/postgres/
pgsql$ /usr/local/bin/postgres
如果您不喜欢将shell作为su(1)
用户的想法,也可以尝试使用sudo(8)
和pgsql
。
现在我想知道为什么你需要postgres
在前台运行。你真的有充分的理由吗?