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

树莓派开机执行shell脚本时切换pi用户运行git pull失败,手动执行正常

故障原因
  • 网络未就绪:LXDE-pi的autostart脚本执行时机非常早,通常在系统网络连接完全建立之前就会运行,此时git pull无法访问远程bitbucket仓库,直接执行失败。手动执行脚本时网络已完成初始化,因此可以正常拉取代码。
  • SSH认证上下文缺失:你使用的是SSH协议的git仓库地址,非交互式会话中通过sudo切换用户执行命令时,不会加载pi用户的完整SSH环境配置,部分场景下会出现无法读取~/.ssh/id_rsa私钥、未验证bitbucket主机公钥的问题。
  • 缺少错误日志:当前脚本没有捕获git pull的错误输出,无法直接判断是网络问题还是认证问题。
解决步骤
  1. 先添加日志输出,定位具体错误
    在autostart脚本的开头添加日志重定向逻辑,把所有执行输出和错误信息写入日志文件:
exec > /var/log/kiosk_autostart.log 2>&1
echo "=== 脚本启动时间:$(date) ==="

脚本执行后查看/var/log/kiosk_autostart.log里git pull对应的报错内容,即可确认具体故障点。

  1. 解决网络未就绪问题
    在执行git pull之前添加网络检测逻辑,等待网络连通后再执行拉取操作:
# 最多等待30秒,确认bitbucket网络连通
for i in {1..30}; do
  ping -c 1 bitbucket.org &> /dev/null && break
  sleep 1
done
  1. 修复SSH认证问题
    修改git pull命令,明确指定SSH私钥路径、跳过主机公钥确认,适配非交互式执行场景:
sudo -H -u pi bash -c 'cd /home/pi/你的项目路径 && GIT_SSH_COMMAND="ssh -i /home/pi/.ssh/id_rsa -o StrictHostKeyChecking=no" git pull git@bitbucket.org:你的仓库地址.git master'
  1. 可选优化:添加失败兜底逻辑
    如果git pull失败不需要中断后续流程,可以添加执行结果判断,拉取失败时打印提示后继续运行Python脚本:
sudo -H -u pi bash -c 'cd /home/pi/你的项目路径 && GIT_SSH_COMMAND="ssh -i /home/pi/.ssh/id_rsa -o StrictHostKeyChecking=no" git pull git@bitbucket.org:你的仓库地址.git master'
if [ $? -ne 0 ]; then
  echo "git pull执行失败,使用本地代码启动服务"
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 09:12:00