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

Tatsuo Ishii ishii @ sraoss.co.jp
2008年 8月 28日 (木) 10:15:46 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]

ちょっと気になるのは,pgpoolの子プロセスで fd 0がクローズされているこ
とです.うーん,なぜなんだろう?
--
Tatsuo Ishii
SRA OSS, Inc. Japan

> となっていました。
> 
> > --
> > 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 メーリングリストの案内