You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nginx中content_by_lua_block无法执行sh脚本执行git pull问题

排查Git Pull未执行的问题

1. 检查权限相关问题

  • 先给脚本加上可执行权限:chmod +x /path/tofile/CD.sh
  • Nginx一般以www-data或nginx用户运行,切换到该用户手动测试脚本逻辑:
    su - www-data -s /bin/bash
    cd /path/to/mygitrepofolder
    git pull
    
    如果这里执行失败,大概率是权限问题:要么该用户对仓库目录无读写权限,要么没有Git远程仓库的访问权限(比如SSH密钥未配置、HTTPS凭证未保存)。

2. 给脚本添加日志,定位执行细节

原脚本没有日志输出,无法排查具体失败环节。修改CD.sh,把执行过程和错误写入日志:

#!/bin/bash
# 将所有输出重定向到日志文件
exec > /var/log/cd_deploy.log 2>&1

echo "脚本启动时间:$(date)"
cd "/path/to/mygitrepofolder"
echo "当前工作目录:$(pwd)"
git pull
echo "git pull执行退出码:$?"
echo "脚本结束时间:$(date)"

触发Webhook后查看/var/log/cd_deploy.log,就能知道是cd命令失败,还是git pull本身出错,以及具体错误信息。

3. 确认Nginx模块是否正常加载

content_by_lua_block依赖Lua模块(通常是OpenResty环境),如果你的Nginx没装Lua模块,这个配置不会生效。可以用nginx -V查看编译参数,确认是否包含Lua相关选项。

如果没有Lua模块,可换成exec指令(需ngx_http_exec_module支持):

location /github {
    exec /path/tofile/CD.sh;
}

注意:exec模块默认可能未编译,需要重新编译Nginx时添加--with-http_exec_module参数。

4. 检查Git仓库的远程配置与访问凭证

  • 进入仓库目录,执行git remote -v确认远程仓库地址正确。
  • 若用SSH协议:确保Nginx运行用户的~/.ssh目录下有对应私钥,且公钥已添加到GitHub仓库的部署密钥中;同时~/.ssh/known_hosts要包含GitHub的主机指纹,避免无交互执行时需要确认主机。
  • 若用HTTPS协议:切换到Nginx用户执行git config --global credential.helper store,然后手动执行一次git pull输入密码,凭证会保存到~/.git-credentials,后续脚本就能无交互拉取。

5. 验证Nginx端点是否真正触发脚本

在脚本开头加一个简单的触发标记:

touch /tmp/webhook_triggered_flag

用Postman发送请求后,查看/tmp/webhook_triggered_flag是否存在。如果不存在,说明Nginx配置未生效(比如没重启加载新配置、请求被防火墙拦截、location路径匹配错误)。


内容的提问来源于stack exchange,提问作者Eduardo Nicolalde

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 20:01:43