ollama怎么一次停止所有在运行的模型?

环境:

ollama

问题描述:

ollama怎么一次停止所有在运行的模型?

解决方案:

1.编写一个脚本

脚本内容:

ollama () {
        if [[ $1 == "pull" ]] && [[ $# -eq 1 ]]
        then
                echo "pulling all models..."
                ollama list | awk '$1 !~ /^registry.local/ {print $1}' | while read -r model
                do
                        if [[ $model != "NAME" ]]
                        then
                                echo "Pulling $model"
                                ollama pull "$model"
                        fi
                done
        elif [[ $1 == "stop" ]] && [[ $# -eq 1 ]]
        then
                echo "stopping all models..."
                ollama list | awk '$1 !~ /^registry.local/ {print $1}' | while read -r model
                do
                        if [[ $model != "NAME" ]]
                        then
                                echo "Stopping $model"
                                ollama stop "$model"
                        fi
                done
        else
                command ollama "$@"
        fi
}

这个脚本定义了一个名为 ollama 的 Bash 函数,用于增强 ollama 命令的功能。它扩展了 ollama 命令的行为,使其能够批量执行某些操作(如 pullstop),而不仅仅是对单个模型进行操作。

以下是脚本的详细解释:


1. 函数结构

ollama () {
    ...
}
  • 定义了一个名为 ollama 的 Bash 函数。
  • 当你在终端中运行 ollama 命令时,会调用这个函数而不是直接调用系统中的 ollama 命令。

2. 检查第一个参数是否为 pull

if [[ $1 == "pull" ]] && [[ $# -eq 1 ]]
  • $1 是传递给函数的第一个参数。
  • $# 是传递给函数的参数总数。
  • 这段代码的意思是:如果第一个参数是 pull,并且只传入了一个参数(即没有其他额外参数)。
具体逻辑
echo "pulling all models..."
ollama list | awk '$1 !~ /^registry.local/ {print $1}' | while read -r model
do
    if [[ $model != "NAME" ]]
    then
        echo "Pulling $model"
        ollama pull "$model"
    fi
done
  • ollama list:列出所有可用的模型。
  • awk '$1 !~ /^registry.local/ {print $1}'
    • 使用 awk 过滤输出,排除以 registry.local 开头的行(可能是本地注册表的模型)。
    • 只打印第一列(通常是模型名称)。
  • while read -r model:逐行读取过滤后的模型名称。
  • if [[ $model != "NAME" ]]:跳过标题行(通常是 NAME 列头)。
  • ollama pull "$model":对每个模型执行 pull 操作(从远程仓库拉取模型)。

总结:当运行 ollama pull 时,脚本会自动拉取所有可用的模型(排除本地注册表中的模型)。


3. 检查第一个参数是否为 stop

elif [[ $1 == "stop" ]] && [[ $# -eq 1 ]]
  • 如果第一个参数是 stop,并且只传入了一个参数。
具体逻辑
echo "stopping all models..."
ollama list | awk '$1 !~ /^registry.local/ {print $1}' | while read -r model
do
    if [[ $model != "NAME" ]]
    then
        echo "Stopping $model"
        ollama stop "$model"
    fi
done
  • pull 的逻辑类似,只是将 pull 替换为 stop
  • ollama stop "$model":对每个模型执行 stop 操作(停止模型运行)。

总结:当运行 ollama stop 时,脚本会自动停止所有正在运行的模型(排除本地注册表中的模型)。


4. 默认行为

else
    command ollama "$@"
fi
  • 如果参数不符合上述条件(例如传入了其他命令或参数),则直接调用系统中的 ollama 命令。
  • command ollama "$@"
    • command 强制调用系统中的原始 ollama 命令,而不是递归调用这个函数。
    • "$@" 将所有传递给函数的参数原样传递给系统命令。

5. 总结功能

这个脚本的主要功能是对 ollama 命令进行扩展,提供以下两个增强功能:

  1. 批量拉取模型

    • 运行 ollama pull 时,会自动拉取所有可用的模型(排除本地注册表中的模型)。
  2. 批量停止模型

    • 运行 ollama stop 时,会自动停止所有正在运行的模型(排除本地注册表中的模型)。

对于其他命令或参数,脚本会直接调用系统中的 ollama 命令。


6. 使用示例

批量拉取模型
ollama pull
  • 输出示例:
    pulling all models...
    Pulling model1
    Pulling model2
    Pulling model3
    
批量停止模型
ollama stop
  • 输出示例:
    stopping all models...
    Stopping model1
    Stopping model2
    Stopping model3
    
其他命令
ollama run model1
  • 直接调用系统中的 ollama 命令,执行 run model1

7. 注意事项

  • 依赖性:脚本依赖于 ollama list 命令的输出格式。如果 ollama list 的输出格式发生变化,脚本可能需要调整。
  • 权限问题:确保你有足够的权限运行 ollama 命令及其子命令。
  • 本地注册表过滤:脚本通过 awk 排除了以 registry.local 开头的模型。如果你的环境中没有这样的模型,可以忽略这部分逻辑。
### 解决Ollama模型停止运行问题 当遇到`sudo systemctl stop ollama`之后Ollama服务及其加载的模型都消失的情况,可以采取以下措施来恢复和稳定Ollama的服务状态。 #### 重新启动Ollama服务 如果仅仅是由于意外原因导致Ollama服务被关闭,在大多数情况下可以通过简单的重启操作解决问题。使用如下命令尝试重启Ollama服务: ```bash sudo systemctl restart ollama ``` 这将会重新加载并激活之前配置好的环境设置[^1]。 #### 安装指定版本的Ollama 对于因版本不兼容或其他软件冲突引起的问题,考虑安装一个更稳定的旧版可能是有效的解决方案之一。通过调整下载链接中的参数至目标版本号(例如v0.1.32),可以从GitHub仓库获取特定版本的安装包,并按照下面的方式完成安装过程: ```bash curl -fsSL https://ollama.com/install.sh | sed 's#https://ollama.com/download#https://github.com/jmorganca/ollama/releases/download/v0.1.32#' | sh ``` 此方法允许用户灵活选择适合当前系统的最佳版本,从而减少潜在的技术难题。 #### 验证和服务管理 为了确保Ollama能够正常工作以及防止未来再次发生类似情况,建议定期检查其服务状态,并熟悉基本的操作指令集。比如,要验证Ollama是否成功启动,可以在终端中键入`ollama`查看响应;而想要终止一次对话,则可通过输入`/bye`或按下Ctrl+d实现优雅退出[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玩人工智能的辣条哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值