php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #18707 Can't run PHP script in background from a PHP CGI script?
Submitted: 2002-08-02 10:18 UTC Modified: 2002-08-02 18:58 UTC
From: scottg at particle dot net Assigned:
Status: Not a bug Package: Program Execution
PHP Version: 4.2.1 OS: Linux 2.2.20
Private report: No CVE-ID: None
 [2002-08-02 10:18 UTC] scottg at particle dot net
This is the strangest thing in the world and I have no idea why it happens.  I'm using Linux 2.2.20 with PHP 4.2.1.  I have PHP compiled in as a module and I have an external PHP binary for CGI work.  

I want bg.cgi to run in the background.

start.cgi:
#!/usr/php/bin/php -q
<?
  system("/usr/php/bin/php -f /somepath/bg.cgi >>/dev/null 2>>/dev/null &"); 
  echo "Ok!\n";
?>

bg.cgi:
#!/apps/php/bin/php -q
<?
  sleep(5);
  mail ("scottg@nospam.com", "Test Subject", "Test Message");
?>

I run start.cgi with the brower like a normal cgi script - http://www.whatever.com/start.cgi. The web page says Ok! like it should.  In the background now I have a bg.cgi process but its going crazy.  It dies and restarts repeatedly.  It gots on for about 1 minute then gives up.  The process number increases with each new bg.cgi process.  Only one bg.cgi process every exists though.  Strangest thing ever.  I never do get the email message bg.cgi is suspose to send.

If I run start.cgi from the command prompt all is well, only one bg.cgi runs fine and I get the email after 5 seconds.

Anyone know why bg.cgi runs crazy if called like this?

Oh ya, if I had a start.php:
<html>
<? system("/apps/php/bin/php -q -f /home/scottg/web/run/bg.cgi >>/dev/null 2>>/dev/null &"); ?>
</html>
and just viewied it in the browser so that the php module runs bg.cgi all works fine too.

Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2002-08-02 10:45 UTC] sander@php.net
You should redirect stdin too. The following example returns _immediately_:
system("sleep 10 </dev/null >/dev/null 2>/dev/null &");
 [2002-08-02 11:56 UTC] scottg at particle dot net
Yes, system("sleep 10 </dev/null >/dev/null 2>/dev/null &");
works because your running sleep or another binary executable.

You must run another PHP script in order to see how crazy it gets.  Wether you run

system("/usr/php/bin/php -f /somepath/bg.cgi >>/dev/null 2>>/dev/null &"); 

or

system("/usr/php/bin/php -f /somepath/bg.cgi </dev/null >/dev/null 2>/dev/null &"); 

It works if bg.cgi is a binary like sleep but will not work if bg.cgi is another PHP script such as:

#!/usr/php/bin/php -q
<?
  sleep(5);
  mail ("scottg@nospam.com", "Test Subject", "Test Message");
?>

Same thing happens under 4.2.1 and 4.2.2 and probably older versions.
 [2002-08-02 12:18 UTC] sander@php.net
Can't reproduce, but i'm using the CLI binary...
(IIRC, there is another bug similar to this one, where the header output gets repeated almost forever... can't find the bug # anymore)
 [2002-08-02 12:23 UTC] sander@php.net
Ah, #11430! Probably related.
 [2002-08-02 18:58 UTC] sniper@php.net
duplicate of: #11430 
Add your comments there..

 
PHP Copyright © 2001-2024 The PHP Group
All rights reserved.
Last updated: Thu Dec 26 19:01:30 2024 UTC