我有一个作为守护进程运行的 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
.
如果我直接从目录内部执行 daemon.php php daemon.php
,则不会发生这种情况,并且一切都按预期工作。
非常反常的行为。如何设置它以使 cron 作业的效果与直接从其目录内执行脚本时的效果完全相同?