Ted's Blog



PHP shell_exec()函数 后台执行时进程Stopped问题

问题场景

通过php调用docker内部命令时进程进入Stopped 代码如下

echo shell_exec("docker exec -it 容器名称 /bin/bash -c 'ls'");

当手动执行时,程序正常运行,但是php脚本后台执行的时候就会进入Stopped

php test.php >> /tmp/output.log &

如果是crontab执行则会略过shell_exec()操作

原因

通过排查发现问题出在 docker exec 命令的参数上

-i/-interactive #即使没有附加也保持 STDIN 打开;如果你需要执行命令则需要开启这个选项

这个参数主要是负责进行交互输入输出的,php的shell_exec() 应该是不支持这种操作

解决方式

去掉 -i 只保留-t输出

echo shell_exec("docker exec -t 容器名称 /bin/bash -c 'ls'");

这样就可以正常的在后台运行了


至于为什么php的shell_exex() 不支持交互操作,后续有时间在深入研究,或者有知道的朋友可以评论区留言 Thank!

分享:

写评论


Contact ME

github:https://github.com/tebie6

email:liumingyuphp@163.com

友情链接

无敌我大鑫哥:http://dream128.cn