[pgpool-general-jp: 487] Re: pgpoolAdmin で pgpool 起動→ apache 上がらず

ISHIDA Akio iakio @ mono-space.net
2008年 8月 27日 (水) 20:51:53 JST


石田です。

2008/08/27 18:23 Tatsuo Ishii <ishii @ sraoss.co.jp>:
> 遅いフォローで申し訳ありません.石井です.
(中略)
> 少なくとも,0, 1, 2はcloseすべきでした.
> # 後 chdir("/")していない:-<
>
> 3以降もcloseするでよいと思いますが...
>
> 一応確認したいんですけど,port 80 のソケット用のfdは,0,1,2のどれかに
> なっているんでしょうか?もしわかったら教えてください.

0,1,2はdup2()でクローズされるので現状のままで良いと思います。
むしろ3以降のcloseが必要です。port 80も3以降と思われます。

http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_2.html#SEC16
http://www.adl.nii.ac.jp/~moro/unix-programmer/faq-j_8.html#SEC88
あたりを参考にしました。

pgpoolAdminからpgpoolの再起動を行なった場合、
httpの子プロセスは、
# ls -l /proc/3546/fd/
合計 8
lr-x------  1 root root 64  8月 27 05:50 0 -> /dev/null
l-wx------  1 root root 64  8月 27 05:50 1 -> /dev/null
l-wx------  1 root root 64  8月 27 05:50 2 -> /var/log/httpd/error_log
lrwx------  1 root root 64  8月 27 05:50 3 -> socket:[7579]
lr-x------  1 root root 64  8月 27 05:50 4 -> pipe:[7587]
l-wx------  1 root root 64  8月 27 05:50 5 -> pipe:[7587]
l-wx------  1 root root 64  8月 27 05:50 6 -> /var/log/httpd/error_log
l-wx------  1 root root 64  8月 27 05:50 7 -> /var/log/httpd/access_log

pgpoolの子プロセスは、
# ls -l /proc/10109/fd/
合計 10
lrwx------  1 apache apache 64  8月 27 05:48 1 -> /dev/null
lrwx------  1 apache apache 64  8月 27 05:48 10 -> socket:[12533]
lrwx------  1 apache apache 64  8月 27 05:48 2 -> /dev/null
lrwx------  1 apache apache 64  8月 27 05:48 3 -> socket:[7579]
lr-x------  1 apache apache 64  8月 27 05:48 4 -> pipe:[7587]
l-wx------  1 apache apache 64  8月 27 05:48 5 -> pipe:[7587]
l-wx------  1 apache apache 64  8月 27 05:48 6 -> /var/log/httpd/error_log
l-wx------  1 apache apache 64  8月 27 05:48 7 -> /var/log/httpd/access_log
lrwx------  1 apache apache 64  8月 27 05:48 8 -> socket:[7617]
lrwx------  1 apache apache 64  8月 27 05:48 9 -> socket:[12531]

となっていました。

> --
> Tatsuo Ishii
> SRA OSS, Inc. Japan
>
>> -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 mailing list
>> pgpool-general-jp @ sraoss.jp
>> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp
>
>



-- 
ISHIDA Akio <iakio @ mono-space.net/ishida @ cycleof5th.com>


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