[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Apache CGI and spawning another process

Francis Hwang

5/7/2005 10:45:00 PM

Hey all,

There's probably a very easy answer to my question, but I've never been
very good with managing process and haven't been able to find this
addressed directly in the archives. So: I'm trying to have a CGI script
that will publish a ton of different XML files. The publishing process
is pretty long, maybe it will run 10 or 15 minutes, but it's not
complicated, and the user doesn't need any feedback, they just need a
message that says "we started the process; it should be done in a few
minutes."

I tried running code that looks like this:

is_parent = fork
system '/some/external/script.rb' unless is_parent
print "Location: /admin_page\n"

And this works on the command-line. It prints the location line right
away and then ends quickly, leaving the external script to run in the
background until it finishes of its own accord.

But the same script doesn't work in Apache ... it runs the external
script, but hangs and doesn't exit. I guess Apache is treating the
spawning of external processes differently. Anybody have experience
with this? Is there some really obvious solution I'm missing?

tia,
Francis Hwang
http://f...



2 Answers

james_b

5/7/2005 11:26:00 PM

0

Francis Hwang wrote:
> Hey all,
>
.

>
> But the same script doesn't work in Apache ... it runs the external
> script, but hangs and doesn't exit. I guess Apache is treating the
> spawning of external processes differently. Anybody have experience with
> this? Is there some really obvious solution I'm missing?

Hack, off the top of my head, untested (but I may yet go try it)
Write a task to crontab and set the time a few seconds from now.

Or: Just have a cron job that pulls tasks off a file-based queue.

Plus the usual caveats about duplication, notification, hung tasks, and
so on.

James



Joost Diepenmaat

5/9/2005 9:17:00 AM

0

On Sun, May 08, 2005 at 07:44:51AM +0900, Francis Hwang wrote:
> Hey all,
>
> There's probably a very easy answer to my question, but I've never been
> very good with managing process and haven't been able to find this
> addressed directly in the archives. So: I'm trying to have a CGI script
> that will publish a ton of different XML files. The publishing process
> is pretty long, maybe it will run 10 or 15 minutes, but it's not
> complicated, and the user doesn't need any feedback, they just need a
> message that says "we started the process; it should be done in a few
> minutes."
>
> I tried running code that looks like this:
>
> is_parent = fork
> system '/some/external/script.rb' unless is_parent
> print "Location: /admin_page\n"
>
> And this works on the command-line. It prints the location line right
> away and then ends quickly, leaving the external script to run in the
> background until it finishes of its own accord.
>
> But the same script doesn't work in Apache ... it runs the external
> script, but hangs and doesn't exit. I guess Apache is treating the
> spawning of external processes differently. Anybody have experience
> with this? Is there some really obvious solution I'm missing?
>

You should probably close the $stdout (and possibly $stdin and $stderr)
streams in the child process, otherwise apache will think there is still
more output coming.

cheers,
Joost Diepenmaat.