[pgsql-jp: 39475] Re: サーバメッセージのファイル保存

EBIHARA, Yuichiro ebihara @ iplocks.co.jp
2008年 6月 27日 (金) 13:46:09 JST


中井さん、返信どうもありがとうございます。

>> pg_ctl startに"-l"というオプションがあって、PostgreSQLサーバの標準出力、標準エラー出力をログファイルに記録することができます。
>> http://www.postgresql.jp/document/pg833doc/html/app-pg-ctl.html
>
> 一般的なOSのログ管理システムを使ってログを記録するのが前提の設定だと
> 思います。OS側の設定に依っては、他のサーバに書き出すこともできます。
> 毎日、ログファイルを日付ごとに分けたり、古いログを消したりも。

他のサーバに書き出す、というのは、NFSやWindowsのネットワークドライブを使うということでしょうか。

ログローテーションに関しては、postgresql.confのパラメータを使うほうが便利そうな気がします。

>> 手元でテストした限りでは、pg_ctl start -lで指定したファイルには、普段は何も書き込まれません。(0バイトのまま)
>> pg_ctl startが失敗(二重起動など)したときのみ、ちょっとしたログが書き込まれたくらいなもんです。
>
> ログのレベルがデフォルトだとNOTICEだけだからじゃないでしょうか。

たぶんlog_directory、log_filenameが認識された時点で、PostgreSQLサーバの出力は全てそっちに流れてしまうと思うんですよ。
なので、pg_ctl start
-lのほうのファイルには、それらの認識前に生成されたメッセージや、pg_ctl自身のメッセージのみが出力されるんじゃないかと想像しているのですが。
だとしたら、pg_ctl start -lのほうの出力は全部捨ててしまってもいいかな、と思ったり。

もしかしたらマニュアルに書いてある、

「ログファイルを指定しない場合、pg_ctlの標準出力は、ファイルにリダイレクトするか、例えばrotatelogsなどのログ回転プログラムのような別プロセスにパイプで渡すべきです。
そうしないと、postgresは出力を(バックグラウンドから)制御端末に書き出すので、シェルのプロセスグループから切り離すことができません。」

のほうが問題なのかもしれません。
だったら、こうすればいい?

$pg_ctl start > /dev/null

--
海老原 雄一郎 / EBIHARA, Yuichiro
 Email: ebihara @ iplocks.co.jp



pgsql-jp メーリングリストの案内