WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:CGIタイムアウトと別プロセス処理

0:[投稿] YK [2007/09/06 15:10 ] [環境:WINDOWS-XP,IE6 WINDOWS-XP,CGI,perl5.8.8 ]

WINDOWS-XP上で、ActivePerlでCGIを組んでいます。

処理時間が45分掛かり、CGIタイムアウトになります。
そこで時間の掛かる処理を、forkやWin32::Process::Createで、別プロセスにして、本プロセスは即時復帰にしても、
本プロセスはもちろん、別プロセスもCGIセッションが張られ、結局、CGIタイムアウトになります。

なにか、良い回避策は、ありませんでしょうか?

尚、処理時間が45分掛かる処理は、これ以上チューニングできないことを前提でお願いします。


1:[回答] 神崎 [2007/09/07 13:21 ]

サーバーがWindows−XPとしか書かれてませんがApacheですか?
バージョン2ならContent-Lengthヘッダも出さないと行けないようです。
http://mm.apache.jp/pipermail/apache-users/2003-November/003346.html
forkは使えないと思いますが、Win32::Process::Createでも関係するかも知れません。


時間のかかる処理をWindowsサービスとして作成してCGIから呼び出すとか、
cronと同じ機能のソフトや、cronに相当するatコマンドというのがある様なので、それを使ってみてはいかがでしょうか。
CGIアプリケーションからその処理に必要な設定ファイルと
crontabの書き出しで行けると思います。


2:[回答] YK [2007/09/10 20:08 ]

神崎さま、回答ありがとうございます。
Apachでなく、IISです。

UNIX系だと標準出力をクローズすることで子プロセスを置き去りにできるのですが、WINDOWS系だと、どうしても置き去りにできませんでした。

ただ、要求後、タイムアウトや別ページ遷移しても、子プロセスは、KILLされず、最後まで処理を行うことを確認しました。
(たぶん、UNIX系だとKILLされるのなか…)


atコマンドやWindowsサービスは、想像を超えたアドバイスで、目にうろこです。試してみます。

尚、WINDOWS-XPでのperl5.8.8だとforkは、間違えなく使えます。


3:[完了] YK [2007/09/13 11:40 ]

atコマンドで上手くいきました。

system関数からatコマンドを発行すると即時にCGIに制御が戻り、
atコマンドで設定した重たい処理の切り離しが出来ました。

ただ、注意点として、at.exeのフルパス指定とか、CGIからの実行権設定とか、起動時間を1分未来に設定とかが必要でした。

神崎さま、ありがとうございました。

回答(必須): 状態:

お名前(必須):

URL:




[戻る]