如何在closures浏览器后让Apache完成运行Perl脚本?

我有一个Perl脚本,由最终用户在Web浏览器中单击快捷方式来激活。 该脚本迭代散列值列表。 当每次迭代向数据库中插入一行时,它会向浏览器输出一些HTML。 环境是Perl,Windows Server 2003标准版,IIS。 我最近迁移到Apache。 传统上迭代次数很less,大多数用户在页面加载完成后closures浏览器。 现在,我们有一个情况,最多有5000次迭代。 现在需要很长时间(1分钟)来执行这5000次迭代。 这不是问题。 问题是,当用户closuresWeb浏览器时,Apache会杀死Perl脚本,因为浏览器没有确认最近发送的HTML,所以我们没有把行插入数据库。 我已经在IIS下进行了testing,用户closures了Web浏览器后,Perl脚本继续运行,并插入了所有的行。 在Apacheconfiguration文件中是否有一个设置会强制Apache完成运行Perl脚本,即使在浏览器closures和套接字被删除之后?

这就是我们正在做的:

foreach my $Destination (sort keys %{$self->{_Destinations}}) { print qq! <td $self->{_bgcolor}>$Destination Queued</td> !; if ($self->{_Data}->Execute(@params)) {&error} } 

我知道我们应该做所有的数据库插入,然后做我们的打印,但这是遗留代码,如果我可以让Apache在这方面像IIS一样行事,那么我将有时间做一个更彻底的重写这个脚本。

即使浏览器已closures/连接在后台作业中终止,也需要进行任何必须的工作。 使用一个工作队列(我喜欢resque,但实际上任何事情都会工作)和一个工作处理器来检索作业,并做必要的插入。 关于编写代码的问题最好在stackoverflow上提问。

在Unix服务器上,在你的perl脚本中你可以尝试忽略信号,例如,

 $SIG{'TERM'}='IGNORE'; $SIG{'HUP'}='IGNORE'; $SIG{'PIPE'}='IGNORE'; 

如果您正在运行Windows服务器,这可能没有帮助。

在这种情况下,这可能会引发其他问题。