场景:网络不稳、海外模型下载容易断连,ollama pull 失败就直接退出,需要自动重试,直到拉取成功。
原始命令
/bin/sh -c until ollama pull llama3.3:70b; do sleep 60; done
命令解读
until 是 Shell 循环语法:命令执行失败(返回非 0)就继续循环,执行成功(返回 0)跳出循环。 逻辑流程:
- 执行
ollama pull llama3.3:70b拉取模型 - 如果下载失败(网络断、超时、连接重置)
- 休眠 60 秒
- 再次尝试拉取,无限循环直到成功
✅ 重点:Ollama 的 pull 原生支持断点续传,重试不会从头下载,已经下载的分片会保留,非常适合大模型(70B 级别)。
⚠️ 坑提醒:
llama3.3:70b标签不一定存在,官方正确标签一般是llama3.3:70b-instruct,使用前先校验标签:
ollama search llama3.3
等价 while 写法(可读性更高):
while ! ollama pull llama3.3:70b; do
echo "pull failed, wait 60s retry..."
sleep 60
done
增强版:增加日志、最大重试次数(防止死循环)
原始脚本是无限重试,如果源一直不可用,脚本会卡死永不退出。生产环境(K8s initContainer、自动化部署)强烈建议加最大重试限制。
#!/bin/sh
MODEL="llama3.3:70b-instruct"
RETRY_DELAY=60
MAX_RETRY=20
n=0
until ollama pull "$MODEL"; do
n=$((n+1))
if [ $n -ge $MAX_RETRY ]; then
echo "Reach max retry $MAX_RETRY, exit with error"
exit 1
fi
echo "Attempt $n failed, sleep ${RETRY_DELAY}s..."
sleep $RETRY_DELAY
done
echo "✅ $MODEL pull done"
适合直接放进 K8s / Docker 的一行压缩版本
/bin/sh -c 'MODEL="llama3.3:70b-instruct";n=0;until ollama pull "$MODEL";do n=$((n+1));if [ $n -ge 20 ];then exit 1;fi;echo "retry $n, wait 60s";sleep 60;done'
使用注意事项
- 磁盘空间:70B 模型体积巨大,提前确认磁盘剩余容量;
- 网络环境:国内直连 ollama 官方源经常超时,建议配置 Ollama 镜像加速;
- 断点续传:ollama pull 中断后重试安全,不需要手动清理缓存;
- 生产建议:不要在正式环境使用无上限无限重试脚本,避免 Pod 卡死。
扩展:Ollama 镜像加速(可选)
配置环境变量,启动 ollama 时指定镜像源,大幅提升国内下载稳定性:
# 示例,替换为可用镜像地址
export OLLAMA_HOST=https://xxx-mirror
正文完
可以使用微信扫码关注公众号(ID:xzluomor)