shell_exec - logging&输出

时间:2011-07-06 10:08:48

标签: php linux shell exec

我正在后台运行多个shell_execprocess.php

shell/ssh上,我执行如下代码:username [~/public_html/curl]# php index.php

实施例...

的index.php

<?php
 shell_exec("php process.php > /dev/null 2>&1 &");
 shell_exec("php process.php > /dev/null 2>&1 &");
 shell_exec("php process.php > /dev/null 2>&1 &");
 shell_exec("php process.php > /dev/null 2>&1 &");
?>

process.php

<?php
$section = rand(999,999999);
$z = 1;
print "STARTED .... \n";
while($z <= 10) {
 print "---------------------------------\n";
 print $section . ": " . $z . "\n";
 $z++;
 sleep(2);
}
print "LOOP FINISH at " . time();
?>

process.php正在运行时,我遇到两个问题:

  1. 我看不到process.php的输出(我需要知道他们在做什么)
  2. 我需要知道哪个流程已经完成,哪个流程已经开始。
  3. 实时记录输出的最佳方法是什么?保存到文本文件?或者如何对mysql数据库(日志表)进行处理?

1 个答案:

答案 0 :(得分:1)

如果你的进程只在另一个php脚本的生命周期内存活,你可以使用popen而不是shell_exec:

http://us.php.net/popen

这为您提供了一种非常方便的方法,可以使用与文件句柄相同的界面将其他进程的数据导入到您的php脚本中。要知道该过程已完成,您可以确保该过程在完成后发送EOF(文件结束),并使用feof php函数来检测它。

另一方面,如果您的进程可能比与其通信的任何其他PHP脚本的寿命更长,那么文本文件可能是非常实用的解决方案。但请记住,磁盘访问总是比内存访问慢得多,因此如果使用文本文件进行通信,则速度不会太快。