git 由 apache 执行时 pull 不工作但在 CLI 上工作

git pull not working when executed by apache but works on CLI

我准备了一个 PHP 脚本 运行

shell_exec("git pull");

它应该是 git repo 运行 的 webhook 每次有更改推送到远程。执行后没有任何反应,我得到一个空响应。

我将目录所有者更改为 "apache"(存储库被克隆为 "apache")。我生成了一个密钥并将其上传到 bitbucket。它似乎工作正常,当我 运行

# sudo -u apache git pull

它工作得很好。不提示任何内容。

当我运行

shell_exec("whoami");

我得到 "apache"。

有没有可能是php挡住了git拉?当我 运行 其他 git 命令(如 git 状态)时,我得到响应。

更新

当我

shell_exec("git pull 2>&1");

它说

error: cannot open .git/FETCH_HEAD: Permission denied

我很困惑。我确定 .git 目录和子目录的所有者是 apache 并且它有正确的权限...

更新 #2

我运行

shell_exec("git --work-tree=/path/to/repo --git-dir=/path/to/repo/.git pull 2>&1");

它仍然说

error: cannot open /path/to/repo/.git/FETCH_HEAD: Permission denied

不可能! /path/to/repo/.git/FETCH_HEAD 大家都能读懂!

我很困惑。

文件夹也需要可写,因为拉动实际上会写入数据。如果它是一个网站 repo(并且您正在使用 apache 组或用户作为 www root 的所有者),您可以将所有者更改为 apache。

找到了!

在花了很多很多时间试图解决这个问题之后,我找到了答案。

SELinux 是问题所在。一个简单的命令解决了它

sudo setenforce 0

一切正常!