[pgpool-general-jp: 472] Re: pgpoolAdmin で pgpool 起動→ apache 上がらず
ISHIDA Akio
iakio @ mono-space.net
2008年 7月 29日 (火) 16:10:13 JST
石田です。
とりあえずdaemonizeする時に全部クローズしてしまうのが
良いのではないでしょうか(dup2じゃなくてdupの方がいいかも
しれませんが)。
-n オプションを付けた場合はファイルディスクリプタは
引き継がれてしまいますが、pgpoolがhttpdのプロセスグループ
になってしまうので、httpdを停止するとpgpoolも止まります。
これの善し悪しはともかく、結果的にport80を占有することは無いです。
----
RCS file: /cvsroot/pgpool/pgpool-II/main.c,v
retrieving revision 1.37
diff -u -r1.37 main.c
--- main.c 22 May 2008 14:36:38 -0000 1.37
+++ main.c 29 Jul 2008 06:36:41 -0000
@@ -621,6 +621,7 @@
static void daemonize(void)
{
int i;
+ int fdlimit;
pid_t pid;
pid = fork();
@@ -652,7 +653,10 @@
dup2(i, 0);
dup2(i, 1);
dup2(i, 2);
- close(i);
+
+ fdlimit = sysconf(_SC_OPEN_MAX);
+ for (i = 3; i < fdlimit; i++)
+ close(i);
write_pid_file();
}
----
2008/7/29 ISHIDA Akio <iakio @ mono-space.net>:
> こんにちは。石田@苫小牧と申します。
>
> こちらでも再現したので、報告します。
> Apache/2.0.52
> PHP 5.1.6
> CentOS 4.6
>
> こんなスクリプトで再現します。
> <?php
> exec("/usr/local/bin/pgpool >/dev/null &", $output, $ret);
> ?>
>
> これをDocumentRootにおいて、httpからアクセスします。
>
> ----
> [root @ localhost html]# service httpd start
> httpd を起動中: [ OK ]
> [root @ localhost html]# wget http://127.0.0.1/pgpool.php
> --19:11:28-- http://127.0.0.1/pgpool.php
> => `pgpool.php.1'
> 127.0.0.1:80 に接続しています... 接続しました。
> HTTP による接続要求を送信しました、応答を待っています... 200 OK
> 長さ: 0 [text/html]
>
> [ <=> ] 0 --.--K/s
>
> 19:11:28 (0.00 B/s) - `pgpool.php.1' を保存しました [0/0]
>
> [root @ localhost html]# service httpd restart
> httpd を停止中: [ OK ]
> httpd を起動中: (98)Address already in use: make_sock: could not bind to
> address [::]:80
> no listening sockets available, shutting down
> Unable to open logs
> [失敗]
> ----
> 想像ですが、phpがpopenした時にが引き継がれているのでは
> ないでしょうか。
--
ISHIDA Akio <iakio @ mono-space.net/ishida @ cycleof5th.com>
pgpool-general-jp メーリングリストの案内