我有一个PHP脚本,它访问数据库表,其中包含有关需要下载的大型文件的信息。我打算以小时为单位将此PHP脚本作为cron作业运行,每次运行时,它应该执行以下操作:
- 检查是否有需要下载的文件
- 如果有,执行一个shell脚本,它会发出一个wget命令,并在后台开始下载该文件,并在准备好后运行第二个php脚本,它会更新db表的完成下载并获取此shell脚本的进程ID,供以后使用
- 检查当前是否有正在下载的文件,如果有,请检查其进程ID是否仍处于活动状态,如果没有,请调整表格以便我们知道下载中某处出现错误
醇>
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脚本继续运行?
答案 0 :(得分:0)
如果您在类似环境的UNIX上运行,那么最简单的方法是在命令行末尾添加&符号(&amp;)。这将告诉shell运行命令而不是等待完成。试试这个:
$command = $command . ' > /dev/null 2>&1 & echo $! &';