2

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 --バージョン 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 に Daemon として実行しないように指示できる方法はありますか?

更新 2: 構成 "silent_mode = off" (デフォルトではオン) がフォアグラウンドで実行され、プロセスがシェルの子プロセスとして実行されるという解決策が得られました。これで質問は答えられます。( ソース - http://postgresql.1045698.n5.nabble.com/BUG-4381-Postgresql-daemon-won-t-stay-in-the-foreground-td2127518.html )

4

1 に答える 1

2

実際、postgresマンページに記載されているように、フォアグラウンドにとどまる必要があります。

デフォルトでは、postgres はフォアグラウンドで開始し、ログ メッセージを標準エラー ストリームに出力します。実際のアプリケーションでは、postgres はバックグラウンド プロセスとして、おそらく起動時に開始する必要があります。

ほとんどの場合、runasコマンドはpostgresプロセスをデーモン化するものです。ユーザーとして起動postgresしたシェルから実行してみてください:pgsql

root# su - pgsql
pgsql$ setenv PGDATA /data/db/postgres/
pgsql$ /usr/local/bin/postgres

ユーザーとしてのシェルの考え方が気に入らない場合は、 su(1)and を試すこともできます。sudo(8)pgsql

postgresなぜフォアグラウンドで実行する必要があるのか​​ 疑問に思っています。本当に正当な理由がありますか?

于 2012-05-24T06:20:47.027 に答える