PHP命令脚本生成的后台脚本打印到屏幕

时间:2017-03-14 20:30:26

标签: php linux bash

我需要创建一个后台脚本,该脚本由PHP命令行脚本生成,该脚本回显到SSH会话。基本上,我需要执行这个linux命令:

script/path 2>&1 &

如果我只是在linux中运行此命令,它的效果很好。输出仍然显示在屏幕上,但我仍然可以将相同的会话用于其他命令。但是,当我在PHP中执行此操作时,它的工作方式不同。

我试过了:

`script/path 2>&1 &`;

exec("script/path 2>&1 &");

system("script/path 2>&1 &")

......这些都不起作用。我需要它来生成进程,然后自行删除以便我可以释放会话,但我仍然希望子进程的输出打印到屏幕上。

(如果不清楚,请发表评论......我很难将其写成文字:P)

1 个答案:

答案 0 :(得分:0)

我想出了一个适用于这种情况的解决方案。

我创建了一个启动PHP脚本的包装器bash脚本,该脚本反过来生成一个子脚本,该脚本的输出重定向到一个文件,bash脚本包装器就是这样。

这是我提出的bash脚本:

  php php_script.php "$@"
  ps -ef | grep php_script.log | grep -v grep | awk '{print $2}' | xargs kill > /dev/null 2>&1
  if [ "$1" != "-stop" ]
  then
      tail -f php_script.log -n 0 &
  fi

(它还会清理仍在运行的“尾部”进程,以便在多次运行此bash脚本时不会获得大量进程)

然后在你的php子脚本中,你可以像这样调用外部脚本:

exec("php php_script.php >> php_script.log &");

这样父PHP脚本退出时不会杀死子脚本,您仍然可以从子脚本获取输出,并且命令提示符仍可用于其他命令。