[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 メーリングリストの案内