PHP& Cron - chdir不工作

时间:2012-04-08 15:18:13

标签: php cron chdir

我有一个PHP脚本,它作为守护进程运行。一次运行8个线程。

为了确保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

如果我从目录中直接用php daemon.php执行daemon.php,那么这不会发生,一切都按预期工作。

非常偏离行为。如何设置它以使cron作业的效果与直接从其目录中执行脚本时的效果完全相同?

1 个答案:

答案 0 :(得分: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);
}

?>