试图在后台运行php脚本脚本

时间:2016-05-13 10:21:20

标签: php linux bash shell

我有一个PHP脚本,它访问数据库表,其中包含有关需要下载的大型文件的信息。我打算以小时为单位将此PHP脚本作为cron作业运行,每次运行时,它应该执行以下操作:

  
      
  1. 检查是否有需要下载的文件
  2.   
  3. 如果有,执行一个shell脚本,它会发出一个wget命令,并在后台开始下载该文件,并在准备好后运行第二个php脚本,它会更新db表的完成下载并获取此shell脚本的进程ID,供以后使用
  4.   
  5. 检查当前是否有正在下载的文件,如果有,请检查其进程ID是否仍处于活动状态,如果没有,请调整表格以便我们知道下载中某处出现错误
  6.   

shell脚本相应地工作,如果我从控制台运行它,一切正常,我也在我的php文件中找回shell脚本的进程id,我的问题是,当原始php文件存在时,它启动的shell脚本也会停止。

这是我在php中用来启动shell脚本的代码:

function runProcess($command, &$output=array()) {
    $command =  $command . ' > /dev/null 2>&1 & echo $!';
    echo $command . "<BR>";
    return exec($command, $output);
}

/** excerpt from the class that does the processing */
$pid=runProcess("sh ".self::DOWNLOAD_FILE_SHELL." ".DEFAULT_DIR_WHOME." 1.xml ".$this->Parent->XMLPath, $output));
echo $pid;

我的问题如下:即使父进程(php脚本)退出,如何强制shell脚本继续运行?

1 个答案:

答案 0 :(得分:0)

如果您在类似环境的UNIX上运行,那么最简单的方法是在命令行末尾添加&符号(&amp;)。这将告诉shell运行命令而不是等待完成。试试这个:

$command =  $command . ' > /dev/null 2>&1 & echo $! &';