我修改了这个 Github 项目的一个版本 https://github.com/lkwdwrd/git-deploy [因为在我的服务器上(Mediatemple Grid Server),某些原因导致 JSON 无法被解析,并且我还添加了自定义日志记录]。该脚本使用 git 钩子自动部署 github 仓库。
该脚本一段时间以来一直正常工作,但最近停止工作了。
我已经确认问题出在
但是,当通过 SSH 登录到服务器并使用与 exec() 函数构建的第一个参数完全相同的字符串以相同的用户身份运行时,我可以成功执行此命令。
所以现在我很困惑。
更新:
感谢 @Matthias Huttar,我将我的 exec() 更改为 proc_open() 调用,以允许我查看 STDERR 的输出 [不确定为什么它没有通过 exec() 记录,但我认为这是因为它是 git fetch 的子进程]。此输出为:
该脚本一段时间以来一直正常工作,但最近停止工作了。
我已经确认问题出在
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
所以我认为我的服务器环境存在问题。但我仍然不能确定。
exec('whoami')
命令,并且脚本正在以我登录的相同用户身份运行。此外,git 仓库不使用 ssh,而只是使用 https 远程连接,因此不应该出现密钥错误。 - iizproc_open()
吗? - iizproc_open()
йҮҚеҶҷдәҶexec()
пјҢ然еҗҺstderrжҳҫзӨәпјҡй”ҷиҜҜпјҡж— жі•еҜ№git-remote-httpsжү§иЎҢforkпјҲпјүпјҡиө„жәҗжҡӮж—¶дёҚеҸҜз”ЁгҖӮиҝҷжҳҜд»Җд№Ҳж„ҸжҖқпјҹ - iiz