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!