Php shell_exec-日志记录和;输出

Php shell_exec-日志记录和;输出,php,linux,shell,exec,Php,Linux,Shell,Exec,我正在后台运行多个shell\u exec,process.php 在shell/ssh上,我执行如下代码:username[~/public\u 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\u exec
process.php

shell/ssh
上,我执行如下代码:
username[~/public\u 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
运行时,我遇到两个问题:

  • 我看不到
    process.php
    的输出(我需要知道他们在做什么)
  • 我需要知道哪个流程已经完成,哪个流程已经开始

  • 实时记录输出的最佳方式是什么?保存到文本文件?或者如何对mysql数据库(日志表)执行此操作?

    如果您的进程仅在另一个php脚本的生命周期内处于活动状态,则可以使用popen而不是shell_exec:

    这为您提供了一种非常方便的方法,可以使用与文件句柄相同的接口将其他进程的数据获取到php脚本中。要知道流程是否完成,您可以确保流程在完成时发送一个EOF(文件结束),并使用feof php函数来检测它


    另一方面,如果您的进程可能比与之对话的任何其他php脚本的寿命更长,那么文本文件可能是一个非常实用的解决方案。不过,请记住,磁盘访问总是比内存访问慢得多,因此,如果您使用文本文件进行通信,它不会达到最佳速度

    如果您的进程仅在另一个php脚本的生命周期内处于活动状态,则可以使用popen而不是shell_exec:

    这为您提供了一种非常方便的方法,可以使用与文件句柄相同的接口将其他进程的数据获取到php脚本中。要知道流程是否完成,您可以确保流程在完成时发送一个EOF(文件结束),并使用feof php函数来检测它


    另一方面,如果您的进程可能比与之对话的任何其他php脚本的寿命更长,那么文本文件可能是一个非常实用的解决方案。不过,请记住,磁盘访问总是比内存访问慢得多,因此,如果您使用文本文件进行通信,它不会达到最佳速度

    试试看这里zneak建议我使用
    proc_open
    试试看这里zneak建议我使用
    proc_open
    一个进程可能比另一个进程需要更长的时间。。(进程将每天运行15小时)。进程必须同时执行。。(不是一个过程完成后再进行下一个过程)。您对这个解决方案有何看法:对于每个进程—它将输出保存到文本文件(例如:process_1.txt)—然后我可以通过浏览器打开一个txt文件(每5秒刷新一次)?我正在寻找可以查看每个进程的输出/日志的解决方案。该解决方案的好坏取决于您的需要。这听起来有点不雅观,但如果它提供了您需要的功能,那就太棒了。在让某些东西工作和编写漂亮的代码之间总是有一个折衷。听起来你的目标是让某些东西工作起来,这是完全好的。如果你让它工作起来,发现有些事情进展缓慢,那就是寻找更优雅解决方案的时候了。泰勒,我已经想出了更好的解决方案。我将日志结果插入mysql数据库(logs表),而不是保存到文本文件中。在日志表中,getmypid()有一个名为process_id的字段……一个进程可能比另一个进程耗时更长。。(进程将每天运行15小时)。进程必须同时执行。。(不是一个过程完成后再进行下一个过程)。您对这个解决方案有何看法:对于每个进程—它将输出保存到文本文件(例如:process_1.txt)—然后我可以通过浏览器打开一个txt文件(每5秒刷新一次)?我正在寻找可以查看每个进程的输出/日志的解决方案。该解决方案的好坏取决于您的需要。这听起来有点不雅观,但如果它提供了您需要的功能,那就太棒了。在让某些东西工作和编写漂亮的代码之间总是有一个折衷。听起来你的目标是让某些东西工作起来,这是完全好的。如果你让它工作起来,发现有些事情进展缓慢,那就是寻找更优雅解决方案的时候了。泰勒,我已经想出了更好的解决方案。我将日志结果插入mysql数据库(logs表),而不是保存到文本文件中。在日志表中,getmypid()有一个名为process_id的字段。。。