【问题标题】:git pull not working when executed by apache but works on CLIgit pull 在由 apache 执行时不工作,但在 CLI 上工作
【发布时间】:2016-05-25 10:45:47
【问题描述】:

我准备了一个可以运行的 PHP 脚本

shell_exec("git pull");

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

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

# sudo -u apache git pull

完美运行。不提示任何内容。

当我跑步时

shell_exec("whoami");

我得到“阿帕奇”。

有没有可能是 php 阻塞了 git pull?当我运行其他 git 命令(如 git status)时,我得到了响应。

更新

当我这样做时

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

它说

error: cannot open .git/FETCH_HEAD: Permission denied

我很困惑。我确定 .git dirs 和 subdirs 的所有者是 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 每个人都可以阅读!

我很困惑。

【问题讨论】:

标签: php git apache bitbucket


【解决方案1】:

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

【讨论】:

  • 谢谢你,Ivan,但这是我做的第一件事。所有项目工作区的所有者都是 apache(它是由该用户克隆的),我什至将 .git 目录(chmod -R 0777 .git)权限更改为 0777。它仍然显示 Permission denied。
  • 尝试将 repo 复制到另一个文件夹并将其 chmod 到 0777(整个 repo 文件夹都写入)以测试它。可能存在一些错误配置,并且您的脚本可能不会在与文件夹所有者相同的用户下执行。
  • 这样做了,把 0777 放在整个 repo 没有运气,仍然得到 Permission denied :( 这一定是 git 的问题
  • 不可能是 git 问题。尽管我的 httpd 在 www-user(位于 www-data 组中)下执行,但将 repo 所有者更改为 www-data 为我修复了它。
  • git 是否有可能试图打开其他文件?不可能整个repo有0777而且打不开。
【解决方案2】:

找到了!

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

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

sudo setenforce 0

现在一切正常!

【讨论】:

  • 这会禁用 Selinux 及其提供的安全性,因为我不知道具体的设置。我对此不能说太多,但请查看此链接以解决该问题。 blog.lysender.com/2015/07/… # SELinux 为 Apache 提供文件,递归 sudo chcon -t httpd_sys_content_t /data/www/html/sites/mysite -R sudo chcon -t httpd_sys_rw_content_t /data/www/html/sites/mysite/logs -R sudo chcon - t httpd_sys_rw_content_t /data/www/html/sites/mysite/uploads -R 也可能设置执行selinux上下文
猜你喜欢
  • 2012-01-16
  • 2013-12-22
  • 2011-01-26
  • 2022-11-10
  • 1970-01-01
  • 2023-03-16
  • 2015-10-19
  • 2022-07-05
  • 2014-11-09
相关资源
最近更新 更多