【发布时间】:2015-04-14 18:39:11
【问题描述】:
我已经修改了这个 github 项目的一个版本 https://github.com/lkwdwrd/git-deploy [我修改它是因为我的服务器(Mediatemple Grid Server)上没有解析 JSON 并且我还添加了自定义日志记录] 脚本使用 git hooks 自动部署 github repos .
脚本在一段时间内运行良好,但最近停止运行。
我已将问题隔离到git fetch 命令。这是我正在使用的确切代码:
exec( 'git fetch ' . $this->_remote . ' ' . $this->_branch, $fetch_output, $fetch_return_var );
$fetch_output 数组是空白的,$fetch_return_var 是 255。所以我认为 255 真的意味着 -1,这是 git 命令的错误。
但是,当 SSH 连接到服务器并以相同的用户身份运行时,我能够成功执行此命令,并且使用与正在构建的 exec() 函数的第一个参数完全相同的字符串。
所以现在我迷路了。
- 通过 SSH 手动运行命令和使用 exec() 之间是否存在有效区别?
- 有什么方法可以得到返回给 exec() 的实际 git fetch 错误?
- 这可能是我的主机更改了某种服务器配置,我应该联系他们吗?
提前致谢
更新:
感谢@Matthias Huttar,我将exec() 更改为proc_open() 调用,让我可以看到STDERR 的输出[不知道为什么它没有通过exec() 记录,但我认为这是因为它是一个git fetch] 的子进程。这个输出是:
error: cannot fork() for git-remote-https: Resource temporarily unavailable
所以我认为我的服务器环境存在问题。不过我还不确定。
【问题讨论】: