■スレッドリストへ戻る■ 全部 1- 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 最新50

read.cgi再開発スレ

433 :ひろゆき@どうやら管理人 ★ :04/12/06 13:49:40 ID:???
>>430
正解。。

434 :FOX ★ :04/12/06 13:59:07 ID:???
>>430
それを実現しつつ常駐化して
さらに毎回呼ぶのは避けようというきかくです

435 :動け動けウゴウゴ2ちゃんねる :04/12/06 14:02:42 ID:s5lFRPnO
>>427
Server poolでも良いんだけど、その辺の設定情報的な物は
どちらかというとApacheの設定情報管理用のフレームワークに
のっけて情報管理した方が良さげ。要は
<Files read.cgi>
 SetHandler dso-script
 SetCgisoValue key value
</Files>

みたくできるように、command_rec型でディレクティブ作る式で。

この場合はmod_cgiso側で設定情報を持って、
loadするDSOに渡すみたいな感じでがよいかなと。

436 :動け動けウゴウゴ2ちゃんねる :04/12/06 15:22:31 ID:eqq5M8TA
>>432
了解しましたー。
ぼちぼちで良いのでお待ちしてます。

乱立スレを見に行くか、、、

437 :とすげ ◆eeDSEEDXRE :04/12/06 16:31:28 ID:MD44dezB
とりあえず、記念ウンコ。

438 :動け動けウゴウゴ2ちゃんねる :04/12/06 22:08:14 ID:sWbcYoEx
のぐそはいかんな

439 :動け動けウゴウゴ2ちゃんねる :04/12/06 23:00:24 ID:Dlimln8Q
dsoとかなんとかで調子良くなるんなら
live15に入れて人大杉解除してくれよん

440 : ◆cZfSunOs.U :04/12/07 07:25:30 ID:4/kWaSl/
>>435 設定情報は確かにそういうやり方の方がスマートかも知れませんね.
ただ,それなら今ある仕組みのままでも,SetEnv 使えば DSO プログラム側から
apr_table_get(r->subprocess_env, "key") で取り出せます.

一方,広告テキストなどはさすがに httpd.conf に書き連ねるのは......
ってことで,こちらはファイルから読み込んで server pool に突っ込んでおく
のが良さそうですね.だいたいこんな感じでしょうか.
----[read.h に追加]---------------------------------------------------
#include <pthread.h>
#include "apr_pools.h"
#include "apr_thread_rwlock.h"
----[read2ch.h に追加]------------------------------------------------
#define AD_FILENAME "ad.txt"
#define AD_CHECK_INTERVAL 60
----[read.c はこんな感じに]-------------------------------------------
    :
typedef struct {
    apr_thread_rwlock_t *rwlock;
    volatile apr_time_t lastchecked, mtime;
    apr_pool_t *pool;
    apr_mmap_t *m;
} ad_pool_t;
    :
static ad_pool_t *get_ad_pool(request_rec *r, const char *ad_key)
{
    /* APR mutex には静的初期化マクロが用意されていないので,ここは pthread mutex を使用 */
    static pthread_mutex_t ad_mutex = PTHREAD_MUTEX_INITIALIZER;
    ad_pool_t *ad_pool, **ad_poolp = &ad_pool;
    apr_pool_t *p = r->server->process->pool;

    apr_pool_userdata_get((void **)ad_poolp, ad_key, p);
    if (!ad_pool) {
        pthread_mutex_lock(&ad_mutex);
        apr_pool_userdata_get((void **)ad_poolp, ad_key, p);
        if (!ad_pool) {
            ad_pool = apr_palloc(p, sizeof *ad_pool);
            ad_pool->lastchecked = ad_pool->mtime = 0;
            if (apr_thread_rwlock_create(&ad_pool->rwlock, p)
                || apr_pool_create(&ad_pool->pool, p))
                ad_pool = NULL;
            else
                apr_pool_userdata_set(ad_pool, ad_key, apr_pool_cleanup_null, p);
        }
        pthread_mutex_unlock(&ad_mutex);
    }

    return ad_pool;
}

441 : ◆cZfSunOs.U :04/12/07 07:27:44 ID:4/kWaSl/
static void update_ad_pool(global_vars_t *gv, request_rec *r, ad_pool_t *ad_pool)
{
    char *adfile;
    apr_file_t *f;
    apr_finfo_t finfo;

    if (gv->t_now - ad_pool->lastchecked < AD_CHECK_INTERVAL * APR_USEC_PER_SEC)
        return;

    apr_thread_rwlock_wrlock(ad_pool->rwlock);

    ad_pool->lastchecked = gv->t_now;
    adfile = apr_pstrcat(r->pool, gv->cwd, "../", gv->zz_bs, "/", AD_FILENAME, NULL);

    if (apr_stat(&finfo, adfile, APR_FINFO_MIN, r->pool)) {
        ad_pool->mtime = 0;
        apr_pool_clear(ad_pool->pool);
    }
    else if (finfo.mtime > ad_pool->mtime
            && gv->t_now - finfo.mtime >= APR_USEC_PER_SEC) {
        apr_pool_clear(ad_pool->pool);
        ad_pool->mtime = apr_file_open(&f, adfile, APR_READ, APR_OS_DEFAULT, r->pool)
                        || apr_file_info_get(&finfo, APR_FINFO_MIN, f)
                        || apr_mmap_create(&ad_pool->m, f, 0, finfo.size, APR_MMAP_READ, ad_pool->pool)
                        ? 0 : finfo.mtime;
    }

    apr_thread_rwlock_unlock(ad_pool->rwlock);
}
    :
int dso_main(request_rec *r, int argc, char **argv)
{
        :
    char *ad_key;
    ad_pool_t *ad_pool;
        :
    ad_key = apr_pstrcat(r->pool, "read.ad.", gv->zz_bs, NULL);
    ad_pool = get_ad_pool(r, ad_key);
    if (ad_pool) {
        update_ad_pool(gv, r, ad_pool);
        apr_thread_rwlock_rdlock(ad_pool->rwlock);
        if (ad_pool->mtime)
            ap_rwrite(ad_pool->m->mm, ad_pool->m->size, r);
        apr_thread_rwlock_unlock(ad_pool->rwlock);
    }
        :
}
----------------------------------------------------------------------

442 :435 :04/12/07 18:10:54 ID:01+8LArA
>>440
なるほど。毎回apr_stat()が走る点がちょっとだけ気になってみたけど、
べつに気にする必要ないかぁ。

あれ、Apache 2.0.xって汎用的なデータ共有リポジトリ的な
APIってなんかありませんでしたっけ?
いっそserver_poolじゃなくてapr_shm_create()あたり使っとけば、
workerモデルとpreforkモデル両方で、動的に情報をshareできて良いんじゃないかしら。
とか言い出してみるテスト。

443 : ◆cZfSunOs.U :04/12/07 19:37:22 ID:4/kWaSl/
>>442
>なるほど。毎回apr_stat()が走る点がちょっとだけ気になってみたけど、

ん〜と,http://qb5.2ch.net/test/read.cgi/operate/1101984763/620 の人が言っていたようなやり方なんですが.
    if (gv->t_now - ad_pool->lastchecked < AD_CHECK_INTERVAL * APR_USEC_PER_SEC)
        return;
で,インターバル期間内は stat もとらずに返してますから.

>あれ、Apache 2.0.xって汎用的なデータ共有リポジトリ的な
>APIってなんかありませんでしたっけ?

そうなんですか? まぁうまい仕組みがあればそれを使った方がいいのでしょうけど.

>いっそserver_poolじゃなくてapr_shm_create()あたり使っとけば、
>workerモデルとpreforkモデル両方で、動的に情報をshareできて良いんじゃないかしら。

これは,私が作った別のモジュール (mod_authz_iplist) でも検討したんですが,
APR ではインタープロセスな rwlock がサポートされてないので見送ってたんですが,
まぁ APR じゃなくて pthread のを使ってしまえばいいのかも知れません.
とりあえず FreeBSD ではサポートされてるようなので.
http://www.freebsd.org/cgi/man.cgi?query=pthread_rwlockattr_setpshared&manpath=FreeBSD+5.3-RELEASE+and+Ports

444 : ◆cZfSunOs.U :04/12/07 20:30:18 ID:4/kWaSl/
......と書いて思ったのだけど,>>440-441 のコードでも mmap() 使ってるんで
ファイルイメージは同一のものを共有してるんですよね.むしろ共有メモリ使っても
そこにファイル内容をコピーするとかでは mmap() 使う意味がなくなってしまうし.

445 :FOX ★ :04/12/13 20:12:59 ID:???
グローバルな変数の話しの続きですが (dso)

1) 普通に共有メモリを使ってやっても問題ない。
2) それならばdaemonを作っていろいろやらせて
  read.cgi からは参照程度にしたほうが効率よい

という話しの流れっすよね?


446 :FOX ★ :04/12/13 20:15:22 ID:???
広告や規制情報ファイルの読み込みの節約もさることながら
たとえば read.cgi が呼ばれたら count++; とやり一日の起動数なんかを
調べちゃったりするのはこの(共有メモリ)延長線上で考えてokってことかな?

あんましポータビリティとかはもはや気にすることもない段階?

447 : ◆cZfSunOs.U :04/12/13 20:54:34 ID:AlKwzA+l
>>445-446 なるほど......

>たとえば read.cgi が呼ばれたら count++; とやり一日の起動数なんかを調べちゃったりする

こういったことをやるなら,確かに全体でデータを共有する必要がありますね.
で,あとは共有メモリ使うのか専用デーモン使うのか,ってところでしょうか.
例えば >>425

>apache自体はproxy動作するだけにさせた方が効率がいいかもしれません。
>read.cgiと.dat読み込みに特化したhttpdを作るというイメージで。

のようなことをやるとして,

・ read.cgi 宛のリクエストは mod_proxy でバックエンドに渡す.
・ バックエンドは DSO 版 read.cgi が動く必要最低限のモジュールを組み込んだ httpd.
・ そのバックエンド httpd はマルチスレッド MPM を使用して子プロセス数は1のみ.
  (これで共有メモリを使わずに1プロセス内で完結させられる)

のような感じで行けるでしょうか......

448 : ◆cZfSunOs.U :04/12/13 21:03:37 ID:AlKwzA+l
>>426

>で、マルチスレッドMPMは昔試していまいちだったので、現在は通常のprefork MPMにしてあります。

というのは,当時より OS のスレッドサポートが改善されていれば行けるのかな,
っていう気もしないではないですが,どうなんでしょうか.

ついでに,バックエンド httpd では起動時に TZ=JST-9 にしておけば
時間のずれの問題(>>405-416)も対応できるかな,と.

449 :root▲ ★ :04/12/13 22:37:23 ID:???
>>448
スレッドサポートは、かなり更新されている模様。
しかし、SpeedyCGIがworker MPMに対応してないんでしたっけか。

450 : ◆cZfSunOs.U :04/12/13 22:47:05 ID:AlKwzA+l
>>449
>スレッドサポートは、かなり更新されている模様。

それなら期待できるかも知れませんね.

>しかし、SpeedyCGIがworker MPMに対応してないんでしたっけか。

それが問題で......これがなければ本体の httpd 自体を worker MPM で動かして
しまえばいいんでしょうけど,とりあえずの対応として read.cgi の処理だけ行う
httpd を worker MPM でバックエンドで動かす(本体から proxy で渡す)
のはどうかな,と......

451 :root▲ ★ :04/12/13 22:48:26 ID:???
>>450
> とりあえずの対応として read.cgi の処理だけ行う
> httpd を worker MPM でバックエンドで動かす(本体から proxy で渡す)
> のはどうかな,と......

お、これってどうやればいいのかしら。
バックエンドというぐらいで、サーバ内部のみで動かすかんじなのかな。

452 : ◆cZfSunOs.U :04/12/13 22:53:24 ID:AlKwzA+l
>>451
バックエンドの httpd は別ポートで立ち上げて,本体側からは
localhost のそのポートに proxy で渡す,って感じですね.

453 :root▲ ★ :04/12/13 22:57:12 ID:???
>>452
なるほど、localhost:なんちゃら とかでやればいいと。
そいつには、違う httpd.conf をくべればいいというかんじですね。

454 : ◆cZfSunOs.U :04/12/13 22:59:22 ID:AlKwzA+l
>>453
そうですね.MPM が違うので httpd も別になりますが.

455 : ◆cZfSunOs.U :04/12/13 23:33:28 ID:AlKwzA+l
ん〜......逆に本体側を worker MPM で動かしてバックエンドを prefork MPM にして,
perl CGI 宛のリクエストを proxy でバックエンドに渡す,っていうのもありかな.
これなら静的コンテンツも worker MPM で処理できることになるんで.

456 :root▲ ★ :04/12/13 23:35:47 ID:???
>>455
お、これってうまくやると、
Perl CGI(端的にはbbs.cgi)をうまく流入制限できたりするのかしら。

457 : ◆cZfSunOs.U :04/12/13 23:37:59 ID:AlKwzA+l
>>456 そうかも知れませんね.

458 :root▲ ★ :04/12/13 23:56:19 ID:???
あ、でもこれ前に考えたのと同じか、、、。
そのときってリモートホストとか、ちゃんと保存されましたっけ。

というか、バックエンド側httpdにそのへんを渡せばいいのかな。
でも、仕組みが必要な気もすこし。

459 :動け動けウゴウゴ2ちゃんねる :04/12/14 00:47:26 ID:CgkyDKrD
>458
mod_rpaf-ap2
を応用すれば良いのでは?

460 : ◆cZfSunOs.U :04/12/14 20:03:45 ID:7v0a8z4f
>>458 要するに,バックエンド側 httpd から呼び出した bbs.cgi 等から
REMOTE_ADDR を参照した際に 127.0.0.1 ではなくて本来のアクセス元が
得られるように,ということですよね? フロントエンド側 httpd で
reverse proxy モードで mod_proxy を使えば X-Forwarded-For
リクエストヘッダが付加されます.で,バックエンド側 httpd で
>>459 の mod_rpaf ( http://stderr.net/apache/rpaf/ ) を使えば
本来のアクセス元が REMOTE_ADDR に設定されます.

なお,元のリクエストに X-Forwarded-For ヘッダが含まれている場合は
", "で区切って付加される形になります.もし bbs.cgi で
X-Forwarded-For を串判定等に利用しているのなら,", "で区切られた
2つ以上の IP アドレスが設定されていれば元のリクエストに
X-Forwarded-For が含まれていたということになりますので,
それに沿って処理すればいいかと思います.

461 :動け動けウゴウゴ2ちゃんねる :04/12/15 22:40:48 ID:fqjSgQsh
ちょっと質問
read.cgiのrawモードは廃止なんですか?

462 :root▲ ★ :04/12/16 00:26:47 ID:???
>>461
RAWモードって、最近だとどのへんのやつが使ってましたっけ。

463 :動け動けウゴウゴ2ちゃんねる :04/12/17 02:22:31 ID:T9G3OSfg
旧版kage(かちゅーしゃ)で使われてた。他の専ブラは知らない。
俺は最新版kageにraw読みこみ機能をつけて、
適宜dat直読みと切り替えられるようにしている。
ググったら現在rawモードはおまけ機能のようなので、
使うなとか廃止とか言われればそれまでだが・・・

464 :動け動けウゴウゴ2ちゃんねる :04/12/20 08:41:30 ID:wnDepaKQ
今は知らんけど、iMonaの一部中間鯖が使ってたはず。

465 : [―{}@{}@{}-] 動け動けウゴウゴ2ちゃんねる :04/12/21 05:34:29 ID:/ZYSbzoV
実際過去ログ倉庫にあるのにエラーが出ます

そんな板orスレッドないです。

1 名前:read.cgi ver8.01+ (04/11/29-) 「Special thanks ◆cZfSunOs.U さん」投稿日:2001/04/12(木) 15:11
そんな板orスレッドないです。

過去ログ倉庫にもありませんでした。
問い合わせても見つかる可能性はほとんどありません。

466 :動け動けウゴウゴ2ちゃんねる :04/12/23 03:35:16 ID:axXC9shI
>>465
>>431-432

467 :FOX ★ :05/01/03 03:29:54 ID:???
少しすすんだんだが、

名前欄って緑じゃなかったっけ?
<font color=green> で強引に緑にするんだっけ?

468 :動け動けウゴウゴ2ちゃんねる :05/01/03 04:20:30 ?# ID:???
今はそうしてるね、
CSSでまとめて色指定してもいいかもね、

469 :FOX ★ :05/01/03 05:27:45 ID:???
■ read.cgi(DSO味)の巻 part1 (2004/12/01-)
http://dso.2ch.net/test/read.cgi/myanmar/1101888913/

テストしてちょ

470 : ◆cZfSunOs.U :05/01/03 12:28:16 ID:yt/ZsWUR
以前も名前欄の色は <font> タグ使わずに CSS 使ったらどうかという話もあったのですが,
当時は CSS 未対応ブラウザのことも考慮して見送りになったということでしたが,今なら
CSS 未対応ブラウザのことはあまり考えずに CSS 使ってしまってもいいかも知れませんね.

あと,

>time[2545861248] LastModifyed 今回は無しの方向で、

Last-Modified なしということは,ブラウザのキャッシュを効かせず毎回読み込ませる
という方針でしょうか? time の表示もおかしくなっているようですが,
apr_time_t はマイクロ秒単位の 64-bit 整数です.printf 文のフォーマット指定は
ILP32 なら %lli,LP64 なら %li かと.

471 :root▲ ★ :05/01/03 16:24:58 ID:???
ということで、news19 でベータテスト開始へ。

【Project peko】2ch特化型サーバ・ロケーション構築作戦 Part16
http://qb5.2ch.net/test/read.cgi/operate/1102087698/615-

472 :動け動けウゴウゴ2ちゃんねる :05/01/03 16:30:32 ID:LXxSW5sT
>>471
500エラーのようで。
http://qb5.2ch.net/test/read.cgi/operate/1084445786/944

473 :root▲ ★ :05/01/03 17:39:54 ID:???
2005年番 read.cgi 開発中。。。 何かあったら報告よろしくです。 FOX ★
みゃんまー http://dso.2ch.net/myanmar/

番すか、、、。

474 :FOX ★ :05/01/03 17:42:18 ID:???
ありりっ

475 :FOX ★ :05/01/03 21:00:27 ID:???
現在 新しいread.cgi は
dso/ex7/ex9/live8/news19 に入っています。

今までのところ、悪さはしていない予感。

476 :FOX ★ :05/01/03 21:05:33 ID:???
次はいよいよ 広告関係なんだが、、、
なるべく広告定義ファイルを読まないように実装したいなぁと
思っているけど出来るべか。

また同じような事を聞きますが、
dso を使った場合。 read.cgi のプロセスは複数起動される。
何個起動されているかは知ることが出来るがコントロールする事は出来ない。
read.cgiプロセス間に相互に関連性はない。

この辺が SpeedyCGI の時とは違っているわけだな。

この認識であってます? (言葉の使い方等も違っていたら突っ込んで欲しい)

477 : ◆cZfSunOs.U :05/01/03 22:42:16 ID:yt/ZsWUR
>>476
>dso を使った場合。 read.cgi のプロセスは複数起動される。

read.cgi は httpd プロセスと同一メモリ空間に読み込まれるので,
read.cgi そのもののプロセスは起動されません.httpd プロセスが複数なら
read.cgi(が読み込まれている)プロセスも複数ということにはなります.

>何個起動されているかは知ることが出来るがコントロールする事は出来ない。

httpd プロセスをコントロールすることが即 read.cgi(が読み込まれている)
プロセスのコントロールということになります.

>read.cgiプロセス間に相互に関連性はない。

相互の関連性というのが変数共有等を指しているのなら,
上の方で言われている通りですね.

478 : ◆ToT/VojxVY :05/01/03 22:45:46 ID:/tYpXQ+q
みゃんまーでテストしてきましたー。
最新レス番を指定すると全レスが表示されますよ。

479 :root▲ ★ :05/01/03 22:46:47 ID:???
read.cgiは完全にhttpdと同化して動く、ということですね。

つまり、prefork(現在の2chのサーバのhttpdの設定)でhttpdの最大数が768個なら、
768個までread.cgiが同時に動く(可能性がある)と。

480 :FOX ★ :05/01/03 22:47:11 ID:???
何回もすみません >>477

どうしますかねぇ

起動毎に広告定義ファイルを読まなくても良い方法。

481 :FOX ★ :05/01/03 22:48:35 ID:???
現在は ソース埋め込みです。

>>479
live16 もdso化しようかと、

482 :root▲ ★ :05/01/03 22:49:48 ID:???
>>481
設定入れてきます。< live16

483 : ◆cZfSunOs.U :05/01/03 22:49:56 ID:yt/ZsWUR
>>480 とりあえず >>440-441 を参考に......

484 :FOX ★ :05/01/03 22:51:59 ID:???
その プールとやらはどこにあるんですか?

見たところ アパッチの中のあるメモリ領域のように感じましたが
read.cgi から作成/設定、設定されていたら読み出し
こんな感じですか?

485 : ◆cZfSunOs.U :05/01/03 22:57:12 ID:yt/ZsWUR
>>484 そういうことですね.

486 :root▲ ★ :05/01/03 23:00:28 ID:???
live16をdso化しました。
news19から持ってきたread.cgiを入れてあります。

487 :FOX ★ :05/01/03 23:01:52 ID:???
どもです どもです >>486

>>485
挑戦してみます。

488 :FOX ★ :05/01/03 23:08:41 ID:???
ちなみに modcgi_dso のホームページってどこなんですか? >>485
リンクしようかと、

489 : ◆cZfSunOs.U :05/01/03 23:12:22 ID:yt/ZsWUR
>>488 現状ではないです.作るなら 2ch Wiki あたりにとか......

490 :FOX ★ :05/01/03 23:16:50 ID:???
りょうかいですー
static なページを作ってそこにリンクしておこう
奮戦気あたりをぼちぼち書いて、

491 :FOX ★ :05/01/03 23:18:59 ID:???
typedef struct のところで
コンパイル時こんなエラーが、

read.c:10: error: syntax error before "apr_thread_rwlock_t"

何かヘッダーが足りないですか?


492 :FOX ★ :05/01/03 23:23:18 ID:???
あと、
#define AD_CHECK_INTERVAL 60

の 60 って単位は sec ですか?

493 : ◆cZfSunOs.U :05/01/03 23:24:48 ID:yt/ZsWUR
>>491 あ......thread サポートが有効でないとそのあたりが定義されませんね......
rwlock や mutex を使ってるところは

#if APR_HAS_THREADS
    :
#endif

で囲ってしまうのがいいかと.

>>492 そうです.

494 :root▲ ★ :05/01/03 23:28:33 ID:???
threadサポートは(今のところ)入れてないです。< tiger/cobra
今のところこれでいきますが、将来worker MPMとか使う時は、どきどき、か。

でもSpeedyCGIもworker MPMには対応してないので、
その時にはまた別途、ってかんじかなと。

495 :FOX ★ :05/01/03 23:29:49 ID:???
それでやってみます

496 :FOX ★ :05/01/03 23:41:47 ID:???
質問ですじゃ


if (ad_pool->mtime)
ap_rwrite(ad_pool->m->mm, ad_pool->m->size, r);

この部分で実際に書いていると思うんですが、(>>441)
1) if (ad_pool->mtime) これはどんな意味なんですか?
2) 文字列はad_pool->m->mmに入っているから strcpy(保存.ad_pool->m->mm);
  とかやって取って置けますか?


497 :FOX ★ :05/01/03 23:42:55 ID:???
ちなみに コンパイルも通って
実際に文字列がファイルから取ってこれるところまではできました。
インターバルが 60 になっているかどうかの検証はしていません。

498 : ◆cZfSunOs.U :05/01/03 23:52:44 ID:yt/ZsWUR
>>497
1) 広告ファイルが存在しないなど読み込み不能の場合は ad_pool->mtime を
  0 にしているので,そのチェックです.
2) できますが,strcpy するなら mmap する意味がなくなってしまうかと.
  現状のコードは mmap された領域自体を保持するようにしています.
  # もっとも,終端が '\0' である保証はないので strcpy より memcpy の方がいいですが.

499 :動け動けウゴウゴ2ちゃんねる :05/01/04 00:03:32 ID:1PKdu0z3
スレ開いたとき上部に出てくるリンクで、
「101-」から「1001-」に該当する部分がごっそり落ちてるんすけど。

500 :FOX ★ :05/01/04 00:03:42 ID:???
ふむふむ

必要なときに出すことにしまーす。

広告定義ファイルが更新されたら即広告も変化するということでいいのかしら?

501 : ◆cZfSunOs.U :05/01/04 00:07:21 ID:cUO4X74T
>>500 前回のチェックから AD_CHECK_INTERVAL 秒経過後のチェックで
ファイル更新が確認されれば広告も更新ということですね.

502 :FOX ★ :05/01/04 00:08:25 ID:???
うーむ

600 sec にして広告変更したらすぐ変わっちまったなぁ
毎回読んじゃっているのかしら?

503 : ◆cZfSunOs.U :05/01/04 00:10:27 ID:cUO4X74T
あと,ファイル更新の際は旧ファイルをいったん rm するか,
新しいファイルをいったん別ファイルで作成した上で mv するか,という手順が必要です.
mmap の性質上,旧ファイルをそのまま書き換えると SEGV でこける可能性があります.

504 : ◆cZfSunOs.U :05/01/04 00:14:01 ID:cUO4X74T
>>502 httpd プロセスが多数ある状況では,前回呼んだ時と同じ httpd プロセスで
処理してもらうってことにはなかなかならないと思うので,その確認をするなら
httpd プロセス数を絞らないと難しいかもです.

505 :root▲ ★ :05/01/04 01:09:03 ID:???
>>504
httpdのpidとかでチェックする、、、のかな。
でも、例えばlive8やlive16とかだと1280人もいるし。

506 : ◆cZfSunOs.U :05/01/04 01:15:34 ID:cUO4X74T
>>505 やるとすればそうなりますね.dso.2ch.net だけ一時的に数を絞ってみるとか......

507 :FOX ★ :05/01/04 01:30:33 ID:???
ファイルは管理人が必要なときに FTP で一気に
全サーバに配られる仕組みになっとります。

508 :root▲ ★ :05/01/04 01:37:16 ID:???
>>507
FTPでもrenameはできるので、
いったん read.cgi.new という名前で put して、
read.cgiにrenameするのがいいとおもわれますです。

509 :FOX ★ :05/01/04 01:38:50 ID:???
バッチというか書き方わからんす 

510 :FOX ★ :05/01/04 01:39:46 ID:???
Perl で FTP だったりするです。
現状までは書いたけど、それ以上は私の能力の限界だったり、、

511 : ◆cZfSunOs.U :05/01/04 01:44:10 ID:cUO4X74T
あっ......>>503 は広告ファイルのことを意図して書いたんですが,
dlopen() も OS 内部で mmap() しますから read.cgi 自体もそうですし,
その他のデータファイル等も CGI 等でオープン中に中身が変わると
やはり不都合が生じる可能性があるので,基本的にその他のファイルも含めて
>>508 のような手順を踏むのがいいかも知れませんね.

512 :root▲ ★ :05/01/04 02:01:16 ID:???
Net::FTP を使ってるなら、単にこれでいいのではと。

$ftp->put("read.cgi","read.cgi.new");
$ftp->rename("read.cgi.new","read.cgi");
$ftp->site("CHMOD","0755","read.cgi");

513 :動け動けウゴウゴ2ちゃんねる :05/01/04 02:04:43 ID:np3HnhYt
リンクはー??
リンクはどうなるんですか?

514 :FOX ★ :05/01/04 02:25:32 ID:???
たくさんあるですよ、、、

515 :動け動けウゴウゴ2ちゃんねる :05/01/04 02:46:07 ID:np3HnhYt
リンクはなくなるの?
スレや他サイトの<a>タグが全然つかなくなってるんですけど

516 :FOX ★ :05/01/04 03:07:30 ID:???
ほぼ完成か?

517 :FOX ★ :05/01/04 03:14:05 ID:???
tiger 全部 dso 化したいですー > root ★さん

game10
news18
game9
etc4
life7
hobby7
で全部かな?

518 :root▲ ★ :05/01/04 03:15:48 ID:???
おぉ、、、。すごい。

ちゃんと、上の広告入ってるですね。< news19

あとはime.nuかしら。
で、一番下のFOX ★は<b>と</b>で囲んだほうがよさげかも。

519 :root▲ ★ :05/01/04 03:18:17 ID:???
>>517
tiger503 ex7 済み
tiger504 game10
tiger505 news18
tiger506 game9/etc4/dso dsoのみ済み
tiger507 live16 済み
tiger508 life7
tiger509 news19 済み
tiger510 hobby7

上記、済み以外のところを作業してくるです。

520 :FOX ★ :05/01/04 03:19:55 ID:???
あっ ime.nu があったか
明日にでもやろう


521 :FOX ★ :05/01/04 03:21:12 ID:???
って ime.nu って今やってもいいんだけど、

単に http://ime.nu/http://abc.bb/ とかってつけるんでしたっけ?

522 :root▲ ★ :05/01/04 03:25:07 ID:???
http://ime.nu/abc.bb/

のように、http:// を除いた部分が入ります。
で、2ch.net内はime.nuを経由しないと。

で、桃色の場合はpinktowerになるのかな。

523 :FOX ★ :05/01/04 03:26:24 ID:???
ime.nu でいいんでしたっけ?
いくつか種類があるような。

524 : ◆cZfSunOs.U :05/01/04 03:27:31 ID:cUO4X74T
ftp://example.com/path/https://example.com/ は ime.nu 側が対応してなければ
直リンの方がいいでしょうけど.

525 :FOX ★ :05/01/04 03:28:36 ID:???
あっと ftp は別にいいとして
https:// は対応しなきゃ < あんかー付け

526 :root▲ ★ :05/01/04 03:36:37 ID:???
>>519 のサーバ側の作業終了です。
これから、まずは news19 の read.cgi を入れておきます。

527 :root▲ ★ :05/01/04 03:44:22 ID:???
>>519 のサーバのread.cgiを、news19のものに入れ替えました。

528 :root▲ ★ :05/01/04 03:52:07 ID:???
>>519 のサーバは、read.cgi / bbs.cgi / subbbs.cgi の時には nokeepalive していたのを
dat直読み同様に keepalive 有効にしました。

529 :root▲ ★ :05/01/04 03:56:48 ID:???
私のほうの作業は、これでおわりのはず。
read.cgiはいったんread.soという名前でftp/putして
chmodしてrenameするのをやってみました。
Text file busyにもならないし、これがよいかなと。

ということで明日より出勤のため、そろそろおやすみなさい。

530 :動け動けウゴウゴ2ちゃんねる :05/01/04 04:01:09 ID:iIFlZlJo
>>529
root氏乙

531 : ◆cZfSunOs.U :05/01/04 04:01:56 ID:cUO4X74T
>>529 お疲れさまでした.


まぁあと気になるのは,Last-Modified チェックをなくしたことで,
リロードしまくりの人が多い場合にどうなるか,ってあたりですが.

532 :root▲ ★ :05/01/04 04:03:10 ID:???
http://news18.2ch.net/test/read.cgi/mnewsplus/1089994287/

dat落ちの時の出方、変えたですか。
最初と最後だけ出すと。

235KB
新着レスの表示

スレッドリストへ戻る 全部 前100 次100 最新50

0ch BBS 2004-10-30