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
一切正常!
我准备了一个 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
一切正常!