Termux 手机本地部署 Qwen 翻译服务

2 阅读3分钟

Termux 手机本地部署 Qwen 翻译服务

用途

闲置手机卖了可惜,安装Termux软件后用作服务器,实现废物利用。

  • ❌️ 安装podman/docker :无root,Termux 的 proot限制,放弃;
  • ✅️ ollama 本地部署大模型

环境

  • 红米 K60 Ultra (16GB内存 + 256GB存储)
  • Ollama:0.21.1(qwen2.5:3b;qwen3:0.6b;qwen3:1.7b;qwen3.5:2b)

准备

安装apk不必赘述,下面是安装完成之后最好去做的几个配置。

必要配置

1)设置SSH方式登录(电脑连接)

  • Termux 的 默认端口不是22,而是8022;
  • Termux 的 默认用户名不是root,是u0_a123,用下面命令查看和确认;

pkg install openssh
sshd                    # 启动 SSH 服务
passwd                  # 设置登录密码(输入时不显示)
whoami                  # 查看当前用户名

ifconfig                # 查看IP地址


# 登录示例
ssh -p 8022 u0_a123@192.168.1.5

Termux 的默认登录端口是 8022 端口,不是标准的 22 端口。

2)sshd服务设置自启(避免ssh连接掉线)

三层兜底保活:先查sv状态规范启动,再查进程存在二次确认,最后裸启sshd硬兜底,确保Termux打开时8022一定通。

echo '[ "$(sv status sshd 2>/dev/null | grep -c ^run)" -eq 0 ] && sv up sshd; [ "$(pgrep sshd)" ] || sv up sshd 2>/dev/null || sshd -p 8022' >> ~/.bashrc

测试:

pkill sshd; source ~/.bashrc; pgrep sshd

3)保活(手机锁屏之后 Termux 掉线)

① Termux 内置保活

# 在 Termux 中执行,获取唤醒锁
termux-wake-lock

或者在手机中设置(参考下面设置)

设置 → 应用 → Termux → 电池 → 无限制(或"不允许后台限制")

② 允许自启动

设置 → 应用 → Termux → 自启动 → 开启

③ 锁定后台(多任务界面)

打开多任务/最近应用界面,找到 Termux,下拉锁定 或点击 🔒 图标

安装 Ollama 及部署大模型

Ollama 的默认行为: 5 分钟无请求后,模型从显存/内存中卸载。

一键安装ollama脚本:在 Termux 中自动启动 Ollama 本地大模型服务,并让它在后台持续运行。

  • 脚本位置:/data/data/com.termux/files/home
  • 脚本名称:start-ollama.sh

#!/data/data/com.termux/files/usr/bin/bash
set -euo pipefail

export OLLAMA_HOST=0.0.0.0:11434
OLLAMA_LOG_DIR="$HOME/.ollama/logs"
mkdir -p "$OLLAMA_LOG_DIR"

# 1. 优雅清理旧进程
if pgrep -x "ollama" >/dev/null 2>&1; then
    echo "发现残留 Ollama 进程,正在终止..."
    pkill -TERM -x "ollama" 2>/dev/null || true
    sleep 2
    # 如果还没死,强制杀
    pgrep -x "ollama" >/dev/null 2>&1 && pkill -9 -x "ollama" 2>/dev/null || true
fi

# 2. 后台启动 Ollama 服务
echo "启动 Ollama 服务..."
ollama serve > "$OLLAMA_LOG_DIR/server.log" 2>&1 &
OLLAMA_PID=$!

# 3. 等待服务就绪(最多 10 秒)
for i in {1..10}; do
    if curl -s http://127.0.0.1:11434/api/tags >/dev/null 2>&1; then
        echo "✓ Ollama 服务就绪 (PID: $OLLAMA_PID)"
        break
    fi
    sleep 1
done

# 4. 检查是否真的启动
if ! kill -0 $OLLAMA_PID 2>/dev/null; then
    echo "✗ Ollama 服务启动失败,查看日志:"
    tail -20 "$OLLAMA_LOG_DIR/server.log"
    exit 1
fi

# 5. 常驻通知(服务确认启动后再发,避免虚假通知)
termux-notification --id "ollama" \
    --title "Ollama 运行中" \
    --content "PID: $OLLAMA_PID | 0.0.0.0:11434" \
    --ongoing \
    --button1 "停止" --button1-action "pkill ollama && termux-notification --id ollama --remove" &

# 6. 保持 CPU 唤醒(服务成功后才锁)
termux-wake-lock

# 7. 拉取模型(可选:拆分到另一个脚本)
if ! ollama list | grep -q "qwen3:0.6b"; then
    echo "正在拉取 qwen3:0.6b..."
    ollama pull qwen3:0.6b
else
    echo "qwen3:0.6b 已存在"
fi

echo "=== Ollama 完全就绪 ==="

# 8. 脚本结束但服务继续后台运行(不要 exit 杀后台)
# 如果需要前台保活,用 wait
# wait $OLLAMA_PID

执行:

chmod +x ~/start-ollama.sh
bash ~/start-ollama.sh

测试效果:

# 测试翻译:英译中
ollama run qwen3:0.6b "Translate to Chinese: Hello world"

# 关闭思考模式
ollama run qwen3:0.6b --think=false "Translate to Chinese: Hello world"

其他命令:


# 查看本地模型
ollama list

# 下载/更新模型
ollama pull qwen3:0.6b

# 删除模型
ollama rm qwen3:2b

# 交互式聊天
ollama run qwen3:0.6b

# 单轮非交互
ollama run qwen3:0.6b "你好"

# 查看运行中的模型
ollama ps

局域网n8n调用模型运行时间及效果示例:

常见问题及解决办法

1)卸载app之后数据会不会丢失?

卸载 Termux = 所有数据全部丢失。 Termux 的数据存在 Android 的应用私有目录 /data/data/com.termux/,卸载 App 时系统会完整删除这个目录。