我需要创建一个后台脚本,该脚本由PHP命令行脚本生成,该脚本回显到SSH会话。基本上,我需要执行这个linux命令:
script/path 2>&1 &
如果我只是在linux中运行此命令,它的效果很好。输出仍然显示在屏幕上,但我仍然可以将相同的会话用于其他命令。但是,当我在PHP中执行此操作时,它的工作方式不同。
我试过了:
`script/path 2>&1 &`;
exec("script/path 2>&1 &");
system("script/path 2>&1 &")
......这些都不起作用。我需要它来生成进程,然后自行删除以便我可以释放会话,但我仍然希望子进程的输出打印到屏幕上。
(如果不清楚,请发表评论......我很难将其写成文字:P)
答案 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脚本退出时不会杀死子脚本,您仍然可以从子脚本获取输出,并且命令提示符仍可用于其他命令。