Running job in the background from Perl WITHOUT waiting for return

Posted by Rafael Almeida on Stack Overflow See other posts from Stack Overflow or by Rafael Almeida
Published on 2010-04-15T15:32:44Z Indexed on 2010/04/15 15:43 UTC
Read the original article Hit count: 499

Filed under:
|
|
|
|

The Disclaimer

First of all, I know this question (or close variations) have been asked a thousand times. I really spent a few hours looking in the obvious and the not-so-obvious places, but there may be something small I'm missing.

The Context

Let me define the problem more clearly: I'm writing a newsletter app in which I want the actual sending process to be async. As in, user clicks "send", request returns immediately and then they can check the progress in a specific page (via AJAX, for example). It's written in your traditional LAMP stack.

In the particular host I'm using, PHP's exec() and system() are disabled for security reasons, but Perl's system functions (exec, system and backticks) aren't. So my workaround solution was to create a "trigger" script in Perl that calls the actual sender via the PHP CLI, and redirects to the progress page.

Where I'm Stuck

The very line the calls the sender is, as of now:

system("php -q sender.php &");

Problem being, it's not returning immediately, but waiting for the script to finish. I want it to run in the background but the system call itself returns right away. I also tried running a similar script in my Linux terminal, and in fact the prompt doesn't show until after the script has finished, even though my test output doesn't run, indicating it's really running in the background.

What I already tried

  • Perl's exec() function - same result of system().
  • Changing the command to: "php -q sender.php | at now"), hoping that the "at" daemon would return and that the PHP process itself wouldn't be attached to Perl.

What should I try now?

© Stack Overflow or respective owner

Related posts about perl

Related posts about php