2012-04-08 31 views
0

我有被作爲後臺進程運行的PHP腳本。 8個線程立即運行。PHP和克龍 - CHDIR不工作

爲了確保8個線程始終運行,下面的PHP腳本是從cron,這是在同一目錄中daemon.php腳本運行:

<?php 

chdir('/root/fb'); 
if (file_exists('pause')) die(); 

exec('ps ax | grep -v grep | grep daemon.php',$output); 
$output=implode("\n",$output); 
$num=8-substr_count($output,'daemon.php'); 
if ($num>0) 
{ 
for($run=0; $run<$num; $run++) 
    { 
    exec('php daemon.php > /dev/null 2>&1 &'); 
    sleep(20); 
    } 
} 

?> 

上面會很樂意運行daemon.php腳本,但後來發生了一些奇怪的事情,daemon.php腳本本身會認爲它有時不在其他時間。具體來說,我使用了很多exec函數來執行其他應用程序,其中很多(但不是全部)認爲它們回到了原始目錄中,而不是在/root/fb中。

如果我從目錄內直接執行daemon.php php daemon.php,那麼這不會發生,並且一切都按預期工作。

非常關行爲。我該如何設置它,以便從cron作業完全相同,直到從其目錄內直接執行腳本?

回答

0

也許簡化和更具防禦性的編程方法可以幫助你縮小問題的範圍。

<?php 

if (!chdir('/root/fb')) die("couldn't chdir"); 
file_exists('pause')) die("paused"); 

exec('pgrep -f "php daemon.php"',$output); 
$output = implode("\n",$output); 
$num = 8 - count($output); 
for($run = 0; $run < $num; $run++) { 
    /*exec('php daemon.php > /dev/null 2>&1 &');*/ 
    passthru('echo $PWD'); 
    sleep(20); 
} 

?>