X



トップページ運用情報
1001コメント347KB

bbs.cgi再開発プロジェクト 3

■ このスレッドは過去ログ倉庫に格納されています
00012chtubo愛用者〜ヘ(゚д゚ヘ))))))〜61 ◆yBEncckFOU
垢版 |
04/02/13 19:08ID:o3jHs/Mb
peko鯖の稼動によりボトルネックの一つである事がより明らかになった
bbs.cgi作り直しプロジェクトです。

関連スレ
【Project peko】2ch特化型サーバ構築作戦 Part6
http://qb3.2ch.net/test/read.cgi/operate/1076413123/
◆ 全サーバトリップ統一作戦
http://qb3.2ch.net/test/read.cgi/operate/1067245837/
bby -- スレッド情報一元管理システム構築スレ
http://qb3.2ch.net/test/read.cgi/operate/1073058944/
BBQ システム(公開串リストメンテ)
http://qb3.2ch.net/test/read.cgi/operate/1073061576/
【連投規制】Samba24 情報要望スレ その3
http://qb3.2ch.net/test/read.cgi/operate/1075568934/
【広告】Rock54【自動排除】 3
http://qb3.2ch.net/test/read.cgi/operate/1074735308/
■ 新しいサーバで read.cgi が正しく動かない問題。 (dat落ち)
http://qb.2ch.net/test/read.cgi/operate/1047840578/


前スレ
bbs.cgi 再開発プロジェクト
http://qb3.2ch.net/test/read.cgi/operate/1053067870/
bbs.cgi再開発プロジェクト2
http://qb3.2ch.net/test/read.cgi/operate/1069144193/
0558354
垢版 |
04/03/01 18:48ID:8AAPGFOi
大改造しているところ大変申し訳ないのだが、
単純に最初のソースの

#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);

の部分を

if($FORM{'subject'} ne ""){#新規スレ立て時
#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);
}

とすればいいような気がする。
0560 ◆rafale0Mno
垢版 |
04/03/01 19:03ID:JTTxA+dl
>>559
>>534 かと。
それなら一回555にしたパーミッションが戻ることもないし。

とPerlよく知らないけど口出ししてみる。
0562動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 19:29ID:BnaSe/vj
>>558
もとのソースだと書きこみが失敗したときでもchmod(0666,)が実行されてたみたい?なので、
if (open(OUT, ">>$DATAFILE"))
print OUT "$outdat\n";
close(OUT);
} else {
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
これだけでもいいかもしれない。
0565354
垢版 |
04/03/01 20:27ID:8AAPGFOi
DATファイル作成後、DATファイルが666で変わらなければ、レス追加時に666を
設定するのは意味が無いし、>>357 >>508にもあるように、555にしたファイル
が666に戻るのは元々想定していないと思います。
DATファイルが666で変わらないことは、実際のDATファイルや全てのソースを
見ないと分からないので、分かる方お願いします。
0567仕事人 ★
垢版 |
04/03/01 20:30ID:???
>>563
FTP で入って chmod 555 しようとおもったら
permition ないって怒られた。
だれの持ち物になっているんだ?

良く起こることなのか?
たまたまなのか?
0568動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 20:30ID:DBas2cAU
1000を超えていることを示すファイルを別に作るのは駄目ですか?

if (1000越ファイルアリ)
{
}
else
{
if (1000超えた) {
1000越ファイル作成
}
}
0570 ◆qb.x27/m96
垢版 |
04/03/01 21:18ID:OvElWHnn
>>567
cgiから作成されたファイルはcgi経由でないと変更出来ない場合ありです。
0571 ◆Nm5090363w
垢版 |
04/03/01 21:24ID:LtyNcyvj
普通にスレストかければいいのかしらん。
0572動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 21:28ID:BnaSe/vj
>>562は{が抜けてた。
if (open(OUT, ">>$DATAFILE"))
{
print OUT "$outdat\n";
close(OUT);
}
else
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
0574未承諾広告※ ◆TWARamEjuA
垢版 |
04/03/01 21:58ID:uUhORkfL
CGI のプロセス ID 付き書き込みデータを、書き込みやさんに渡す。
書き込みやさんから、その結果を SIGNAL として呼ばれるのを待つ。
成功したら SIGUSR1 とか失敗したら SIGTERM とか。(現状の bbs.cgi では SIGNAL は単純に exit; ですよね?)
でもって 10 秒以上経過しても結果が帰ってこなかったら、DispError("ERROR!","ERROR! (゚∀゚)アヒャヒャヒャヒャ")

せっかくのうに環境なんだから。。。
0578 ◆qb.x27/m96
垢版 |
04/03/01 22:28ID:OvElWHnn
これを試してみてくれないかなぁ。。。

----
#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1010)#念のため暴走ストッパー
{
chmod(0555, $dattemp);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
chmod(0555, $dattemp);#←ここに、これ入れたらどですか
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
if($lognum < 1000)#666は1000以下で
{
umask(0);
chmod(0666, $dattemp);
}
}
0579 ◆Nm5090363w
垢版 |
04/03/01 22:30ID:LtyNcyvj
>>578
DispErrorはexitするので、2つ目のchmodは実行されないです……。
0580 ◆qb.x27/m96
垢版 |
04/03/01 22:39ID:OvElWHnn
>>579
あらら直前にあるのに今気がついた。。。
もう少し考えてみますです。。
0581動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 22:43ID:n5/8aIYu
if($FORM{'subject'} ne ''){#新規スレ立て時
#パーミッション調整
umask(0);
chmod(0666, $DATAFILE);
}

これも組み込んだらいいかと
0582動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 22:44ID:BnaSe/vj
>>558でいいと思うんだけど、通常の書きこみ時にsubjectが送られたときのことを考えて、
>>562と合わせて、
if(!-e $DATAFILE){
1の書きこみ&パーミッション調整
}elsif(open(OUT,">>$DATAFILE")){
通常の書きこみ
}else{
エラー
}
でどうか。

ところで、今どれが入っているの?
0583動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/01 22:45ID:L7vZN1iP
if($lognum > 1010)#念のため暴走ストッパー
{
chmod(0555, $dattemp) or DispError("ERROR!", "ERROR:chmodできないよ?緊急緊急緊急!!");
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
chmod(0555, $dattemp)が失敗してるのか、
それともどこかで666にchmodされてるのか調べてみるとか
0584root ★
垢版 |
04/03/01 23:13ID:???
>>567
suexecって、たまに「抜けてくる」ことがあります。

ひょっとして、chmod()できないのって、それが原因?
0586仕事人 ★
垢版 |
04/03/02 03:20ID:???
うーん
実況の各板たらーっと見てきたけど 1,001 で止まっているなぁ

>>563
のスレッドだけの問題なのかどうなのか。
0588仕事人 ★
垢版 |
04/03/02 03:48ID:???
警察板 は呪われているのか?
0589動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 03:51ID:oQ+yX4a+
>>588
配り忘れているとか
0590仕事人 ★
垢版 |
04/03/02 03:52ID:???
もちろんまずは自分を疑えってことで
それは見てみたのでしたー
0591動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 03:56ID:oQ+yX4a+
>>590
もしかしてnews6/news7配り忘れていない
0592仕事人 ★
垢版 |
04/03/02 03:59ID:???
どうだろ、、
自動で配布しているからなぁ
version 番号付けて配ってみるです < こんど
0593動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 04:11ID:IJTX52N4
警察板
ERROR:このスレッドには書き込めません。緊急緊急緊急!!
のエラーはでますが、いくらでも書けますよ
0595動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 08:27ID:TSOc+dgc
>>567
oyster100/200/900番台ならroot師におながいしてchownしてもらえばいいのではないかと。
0596動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 14:08ID:RzANnUAw
if (-e $DATFILE && (!-w $DATFILE || -s _ > 512 * 1024)) {
 DispError("ERROR!", "ERROR:このスレッドには書き込めません。");
}

#中略

my $lognum = 0;
if (open(IN, "< $DATFILE")) {
 $lognum = (join('', <IN>)) =~ tr/\n/\n/;
 close(IN);
}

if ($lognum > 1010) {
 chmod(0555, $DATFILE);
 DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");

}else{
 if (-w $DATFILE && open(OUT, ">>$DATFILE")) {
  print OUT "$outdat\n";
  ++$lognum;
  if ($lognum > 999) {
   print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
   ++$lognum;
   close(OUT);
   chmod(0555, $DATFILE);
  }
  close(OUT);

 }elsif (!-e $DATFILE) {
  # スレ立て処理
  chmod(0666, $DATFILE);

 }else{
  DispError("ERROR!", "ERROR:このスレッドには書き込めません。");
 }
}

#(´-`).。oO(テストまでしちゃったよ…)
0597 ◆qb.x27/m96
垢版 |
04/03/02 14:28ID:46NZVWRI
>>534
http://society.2ch.net/test/read.cgi/police/990121724/

>"ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"

↑これが出ているのに上のスレに書き込めるということは bbs.cgi の序盤のここ↓を通り抜けているということなので
パーミッションがどこかで再変更されているはず。

>#.datが存在してないか書けないならばいばい
>unless(-w $DATAFILE){
>DispError("ERROR!","ERROR:このスレッドには書けません!");
>}
----
http://society.2ch.net/test/read.cgi/police/1040783990/
このスレは現在パーミッションではなくてここ↓で止まっているもよう。

>unless( -s $DATAFILE <= 512000){
>DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!");
>}


なので一番ぁゃιぃここをこの↓ように追加修正すれば現在書き込めるものも含めて
再度パーミッション変更されるので書き込み出来なくなるはず。

#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
if($lognum > 1010)#1011以上なのに666の暴走ストッパー
{
chmod(0555, $dattemp);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。禁止禁止禁止!!");
}

#禁止と表示されればここ↑で再設定されたはずなので書き込めていないはず。。
0598動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 22:25ID:WdyfTS6A
WebProg板だと「情報を小出しにするな」って怒られるんだな
規制とかクリティカルな部分を除いて公開、でもダメ?
0599動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/02 22:57ID:+220nzEb
まぁ普通はブラックボックス部分は除いて公開するのが良いよね。
規制のあたりはサブルーチン化してパラメーターと返り値だけ提示すりゃいいんじゃないの。
0603仕事人 ★
垢版 |
04/03/03 20:20ID:???
現在の bbs.cgi の version

20040301
0604 ◆qb.x27/m96
垢版 |
04/03/03 20:39ID:Q6TtuXTp
どこがどう変わったのか変更点がよくわからないですがまだ書き込めます
0605仕事人 ★
垢版 |
04/03/03 20:41ID:???
全部のサーバが同じかどうかの指標。
0607 ◆qb.x27/m96
垢版 |
04/03/03 20:44ID:Q6TtuXTp
そうですか。。
ではまたしばらく待機しておきます。。。
0608▲ 某ソレ511
垢版 |
04/03/03 20:45ID:dMJAeQ2p
>>606
そこで確認できる範囲では、news7だけ更新されませんね。
live5はまた別だろうし。
0609仕事人 ★
垢版 |
04/03/03 20:53ID:???
おおーっ

news7 も配布先リストに加えました。
0616 ◆qb.x27/m96
垢版 |
04/03/04 22:25ID:R3QQxE+y
   ∧_∧
  ( ・∀・) <忙しそうだし、催促せずに待ちますね。。
  ( つ旦)
  と__)__)
0619動け動けウゴウゴ2ちゃんねる
垢版 |
04/03/05 18:04ID:cFF945EX
ためしになつかしドラマ板の1000近いスレをいくつか埋めてみたんだけど
どれも1000突破した。もしかして板、というか鯖によって突破したり突破しなかったりするのか?
0620仕事人 ★
垢版 |
04/03/05 18:11ID:???
ccccc
0622仕事人 ★
垢版 |
04/03/05 18:22ID:???
0.7 です。

お薬貰っていってくださいー
0624仕事人 ★
垢版 |
04/03/05 18:27ID:???
sub MakeWorkFile{
に最後の手段を追加してみた。
0625仕事人 ★
垢版 |
04/03/05 18:27ID:???
my $key = @_[0];
my $workfile = $TEMPPATH . $key . ".html";
my $dattemp = $DATPATH . $key . ".dat";
my (@messx,@content,@logdat);
my ($lognum,$mailto,$time,$brmax,$topnum,$firstlog,$name,$mail,$subject,$message);

open(RDAT,"<$dattemp");
@logdat=<RDAT>;#ログを配列に読み込む
close(RDAT);

#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1020)#最後の手段
{
if(-w $dattemp){
my $datdat = $DATPATH . $key;
my $tmpdat = $DATPATH . $key . ".tmp";
my $success;
open(COPY, "cp $dattemp $datdat |");
close(COPY);
$success = 0;
until($success){ $success = rename($datdat, $dattemp); }
chmod(0555, $dattemp);
unlink($tmpdat);
}
DispError("ERROR!", "ERROR:このスレッドには書き込めません。最後の手段!!");
}
if($lognum > 1010)#念のため暴走ストッパー
{
umask(0);
chmod(0555, $dattemp);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
umask(0);
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}

0628サザン ★
垢版 |
04/03/05 18:46ID:???
何故か bubble サーバは、
昔立てられたスレッドの所有者が nobody になっているもより。

ということは・・・
0632仕事人 ★
垢版 |
04/03/05 19:21ID:???
引越し時に chmod で 777 にするんじゃなく
chown(でしたっけ?) 後 666 にすべきなのか?

ということは、引越し後の正しい呪文は
0634root ★
垢版 |
04/03/05 19:41ID:???
一般ユーザ(にsuexecされたCGI)がchownなんてできないと思うなぁ。
0636 ◆qb.x27/m96
垢版 |
04/03/05 19:52ID:7NAUewz2
1000越えて書き込めていたのは確認した範囲では
去年以前に建立てられたスレのようだったし
今年に入ってから立てられたもので、1000ストッパーが
効いていないものってなかったような、、

サザンさんの>>628あたりに謎の答えがありそう、、、
0637root ★
垢版 |
04/03/05 20:04ID:???
古いスレを中心に、オーナーがおかしいやつがあるから、そいつら修正すればいいってこと?
(ストッパーが効かない原因のひとつ)

ディレクトリの持ち主がその人であれば「消す」ことはできるから、
例えばnobodyとかが持ち主のファイルを探して、一斉にこんなかんじにすればいいのかな。

(1000000000.dat のオーナーがおかしいとする)

cp -p 1000000000.dat tmp1000000000.dat
rm -f 1000000000.dat
mv tmp1000000000.dat 1000000000.dat

2行目でいきなりmv -fしてもいいけど、なんだかいやな予感がするんで。

find -user nobody とかして、該当のファイルについて一斉にやればよさそうな気がする。
0638root ★
垢版 |
04/03/05 20:06ID:???
FreeBSDでは、

cp -p 1000000000.dat tmp1000000000.dat
mv -f tmp1000000000.dat 1000000000.dat

でOKでした。Linuxでもやってみるか。
0639root ★
垢版 |
04/03/05 20:08ID:???
あ、そっか。Linuxでsuできる環境もってないや。
どなたか、実験きぼんぬ。

% mkdir test
% cd test
% sudo touch A
% cp -p A A.tmp
% mv -f A.tmp A

で、そのユーザのAになれば無問題。
0640仕事人 ★
垢版 |
04/03/05 20:14ID:???
>>635
いや banban で
0641 ◆qb.x27/m96
垢版 |
04/03/05 20:50ID:7NAUewz2
>>637
古いスレでオーナーがおかしいやつの中で
1000間近なスレのURIがいくつか分かりますか?
0644root ★
垢版 |
04/03/05 20:59ID:???
>>641
例えばbubbleサーバのnatsumeloj板なら、

find ./public_html/natsumeloj -user nobody -name \*.dat -print

なんてのを流せば、すぐわかるかと。
これをサーバの数分、板の数分やればいいかな。

ひまをみて、_service/を見て板名とってきてfindかけて、
オーナーをfixするためのshell scriptでも書いてみましょ。
できたら、各マシンで手分けして流していただくということで。
0648root ★
垢版 |
04/03/05 21:04ID:???
移転の時は普通にファイルを移動してるだけなので、chownしなくてもいいはずです。>>647

というか、普通はこんなこと起きない気がしますね。< オーナが違う
途中でsuexec環境に変わった場合にのみ、起こるはず。

あるいはsuexecがバグっていて、「httpdのオーナーが抜けてきちゃった」場合とか。
# 経験したことあります。
0650root ★
垢版 |
04/03/05 21:05ID:???
>>648 補足。
> 移転の時は普通にファイルを移動してるだけなので、chownしなくてもいいはずです。>>647

理由: マシンをまたいだファイル移動の時に、オーナーが変わるから。
0653未承諾広告※ ◆TWARamEjuA
垢版 |
04/03/05 21:16ID:JZ5VNBHA
>>639
drwxr-xr-x 2 (・∀・)ニヤニヤ users 4096 Mar 5 21:13 ./
drwxrwxrwx 15 root root 4096 Mar 5 21:11 ../
-rw-r--r-- 1 root root 0 Mar 5 21:12 A
-rw-r--r-- 1 (・∀・)ニヤニヤ users 0 Mar 5 21:12 A.tmp
[(・∀・)ニヤニヤ test]$ mv -f A.tmp A
[(・∀・)ニヤニヤ test]$ ls -la
合計 8
drwxr-xr-x 2 (・∀・)ニヤニヤ users 4096 Mar 5 21:14 ./
drwxrwxrwx 15 root root 4096 Mar 5 21:11 ../
-rw-r--r-- 1 (・∀・)ニヤニヤ users 0 Mar 5 21:12 A
[(・∀・)ニヤニヤ test]$
0654 ◆qb.x27/m96
垢版 |
04/03/05 21:18ID:7NAUewz2
>>644
色々と考えられる事はあるのですが順番にやっていかないと
どれが原因か分からなくなりそうなので、まずこれから。。

見つかったスレに1000番目を書き込んだ時にこれ↓が表示されるかどうかが知りたかったんですよ。
>"ERROR!", "ERROR:このスレッドには書き込めません。最後の手段!!"


で、おそらく表示されるだろうとは思うのですが
1000 over を判定しているのはこれ↓を書き込む為にしているような、、
>"1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"


cgiの最初の方でこれ↓しか見ていないのは負荷軽減の為だと思うのですが
1000を越えているかどうかを最初に見ればパーミッションがどうなっていようと
1000を越えているスレには書き込めないと思うのですけど、既出の問題なのかしら、、

>#.datが存在してないか書けないならばいばい
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況