Jetson Orin NX 16G设备上配置AI服务自动启动的方案,包括Ollama、llama-server和OpenClaw Gateway三个组件

Jetson Orin NX 16G 开机自动启动 来配:

  • Ollama :保留官方安装脚本创建的 ollama.service,只加一个 override.conf。这是 Ollama 官方推荐的 Linux 定制方式。(Ollama Docs1)
  • llama-server :单独做系统级 llama-server.servicellama.cpp 官方文档确认它是轻量 C/C++ HTTP 服务,支持 OpenAI 兼容 API,并且支持 --alias--host--port--ctx-size--parallel-ctk/-ctv 这些参数。(GitHub2)
  • OpenClaw :官方默认是 systemd user service ,但官方也明确说在 always-on / multi-user servers 上可以改成 system service ;下面我就给你系统级写法,便于无人值守。openclaw gateway 支持 --bind--port。(OpenClaw3)

先提醒一个要点:

你前面那份 openclaw.json 里,gateway 建议补上这一行,否则 Gateway 可能拒绝启动:

json5 复制代码
gateway: {
  mode: "local",
  bind: "loopback",
  port: 18789,
  auth: { token: "REPLACE_WITH_A_LONG_RANDOM_TOKEN" }
}

因为 OpenClaw CLI 文档写明:默认情况下,Gateway 会拒绝启动,除非 ~/.openclaw/openclaw.json 里设置了 gateway.mode=local--allow-unconfigured 只是临时/dev 用。(OpenClaw4)


0)先把占位符改成你的实际路径

下面文件里会出现这些占位符,保存前先替换:

  • <JETSON_USER>:你的登录用户名,比如 ubuntu
  • <JETSON_HOME>:比如 /home/ubuntu
  • <LLAMA_MODEL>:比如 /home/ubuntu/models/base/qwen2.5-3b-instruct-q4_k_m.gguf

1)Ollama:override 文件

Ollama 官方建议 Linux 上通过 systemctl edit ollama/etc/systemd/system/ollama.service.d/override.conf 来加环境变量;OLLAMA_HOSTOLLAMA_MODELSOLLAMA_KEEP_ALIVE 都是官方支持的环境变量,OLLAMA_CONTEXT_LENGTH 也可用来固定上下文长度。官方还说明:如果你改了 OLLAMA_MODELS,要确保 ollama 用户对目录有读写权限。(Ollama Docs1)

ini 复制代码
# /etc/systemd/system/ollama.service.d/override.conf
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_CONTEXT_LENGTH=4096"
Environment="OLLAMA_KEEP_ALIVE=10m"
Environment="OLLAMA_MODELS=/srv/ollama/models"

准备模型目录:

bash 复制代码
sudo mkdir -p /srv/ollama/models
sudo chown -R ollama:ollama /srv/ollama/models

2)llama-server:系统级服务

这里我按 Jetson 保守参数写好了:

  • 只监听 127.0.0.1:8080
  • ctx-size=4096
  • parallel=1
  • KV cache 用 q8_0
  • 显式 --alias,方便 OpenClaw 用固定 model id 对接
  • GGML_CUDA_ENABLE_UNIFIED_MEMORY=1,这是 llama.cpp 官方 build 文档里写明的 Linux 统一内存开关,显存不够时会回退到系统内存而不是直接崩掉。(GitHub2)
ini 复制代码
# /etc/systemd/system/llama-server.service
[Unit]
Description=llama.cpp server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=<JETSON_USER>
Group=<JETSON_USER>
WorkingDirectory=<JETSON_HOME>
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
Environment="GGML_CUDA_ENABLE_UNIFIED_MEMORY=1"
ExecStart=<JETSON_HOME>/src/llama.cpp/build/bin/llama-server \
  -m <LLAMA_MODEL> \
  --alias qwen2.5-3b-instruct-gguf \
  --host 127.0.0.1 \
  --port 8080 \
  -c 4096 \
  -np 1 \
  -ctk q8_0 \
  -ctv q8_0
Restart=always
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

3)OpenClaw Gateway:系统级服务

OpenClaw 官方 Linux 文档给的是 user service 路线,但 setup 文档也明确说:always-on / multi-user servers 可以改用 system service。openclaw gateway 支持 --bind--portgateway status --require-rpc 可用于检查 RPC 是否真的健康。(OpenClaw3)

我这里把它写成:

  • 跑在你的登录用户下
  • HOME 指到你的家目录
  • 只监听 loopback
  • 默认依赖 Ollama 和 llama-server 启动后再起
ini 复制代码
# /etc/systemd/system/openclaw-gateway.service
[Unit]
Description=OpenClaw Gateway
After=network-online.target ollama.service llama-server.service
Wants=network-online.target ollama.service llama-server.service

[Service]
Type=simple
User=<JETSON_USER>
Group=<JETSON_USER>
WorkingDirectory=<JETSON_HOME>
Environment="HOME=<JETSON_HOME>"
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
# 可选:把 token 放到环境文件,而不是写死在 openclaw.json
EnvironmentFile=-/etc/default/openclaw-gateway
ExecStart=/usr/bin/env openclaw gateway --bind loopback --port 18789
Restart=always
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target

如果你想把 token 放环境文件,建这个:

bash 复制代码
sudo tee /etc/default/openclaw-gateway >/dev/null <<'EOF'
OPENCLAW_GATEWAY_TOKEN=REPLACE_WITH_A_LONG_RANDOM_TOKEN
EOF
sudo chmod 600 /etc/default/openclaw-gateway

openclaw gateway CLI 文档确认 --token 会设置 OPENCLAW_GATEWAY_TOKEN,而 gateway status 在 Linux systemd 安装下也会读取 unit 里的 Environment=EnvironmentFile= 来检查认证漂移。(OpenClaw4)


4)可选:把三者绑成一个 target

这样你只需要启一个目标:

ini 复制代码
# /etc/systemd/system/jetson-ai-stack.target
[Unit]
Description=Jetson Local AI Stack
Wants=ollama.service llama-server.service openclaw-gateway.service
After=ollama.service llama-server.service openclaw-gateway.service

[Install]
WantedBy=multi-user.target

5)一次性落盘命令

<JETSON_USER><JETSON_HOME><LLAMA_MODEL> 换掉后执行:

bash 复制代码
sudo mkdir -p /etc/systemd/system/ollama.service.d

sudo tee /etc/systemd/system/ollama.service.d/override.conf >/dev/null <<'EOF'
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_CONTEXT_LENGTH=4096"
Environment="OLLAMA_KEEP_ALIVE=10m"
Environment="OLLAMA_MODELS=/srv/ollama/models"
EOF

sudo mkdir -p /srv/ollama/models
sudo chown -R ollama:ollama /srv/ollama/models

sudo tee /etc/systemd/system/llama-server.service >/dev/null <<'EOF'
[Unit]
Description=llama.cpp server
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=<JETSON_USER>
Group=<JETSON_USER>
WorkingDirectory=<JETSON_HOME>
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
Environment="GGML_CUDA_ENABLE_UNIFIED_MEMORY=1"
ExecStart=<JETSON_HOME>/src/llama.cpp/build/bin/llama-server \
  -m <LLAMA_MODEL> \
  --alias qwen2.5-3b-instruct-gguf \
  --host 127.0.0.1 \
  --port 8080 \
  -c 4096 \
  -np 1 \
  -ctk q8_0 \
  -ctv q8_0
Restart=always
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

sudo tee /etc/systemd/system/openclaw-gateway.service >/dev/null <<'EOF'
[Unit]
Description=OpenClaw Gateway
After=network-online.target ollama.service llama-server.service
Wants=network-online.target ollama.service llama-server.service

[Service]
Type=simple
User=<JETSON_USER>
Group=<JETSON_USER>
WorkingDirectory=<JETSON_HOME>
Environment="HOME=<JETSON_HOME>"
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
EnvironmentFile=-/etc/default/openclaw-gateway
ExecStart=/usr/bin/env openclaw gateway --bind loopback --port 18789
Restart=always
RestartSec=3
LimitNOFILE=65535

[Install]
WantedBy=multi-user.target
EOF

sudo tee /etc/systemd/system/jetson-ai-stack.target >/dev/null <<'EOF'
[Unit]
Description=Jetson Local AI Stack
Wants=ollama.service llama-server.service openclaw-gateway.service
After=ollama.service llama-server.service openclaw-gateway.service

[Install]
WantedBy=multi-user.target
EOF

6)重载并启用

bash 复制代码
sudo systemctl daemon-reload

sudo systemctl enable --now ollama
sudo systemctl enable --now llama-server
sudo systemctl enable --now openclaw-gateway

# 可选:以后用这个 target 一起管
sudo systemctl enable jetson-ai-stack.target

7)健康检查

Ollama 官方文档说明它跑起来后 API 默认在 localhost:11434/api/...;OpenClaw 官方推荐先看 openclaw statusopenclaw gateway statusopenclaw doctoropenclaw channels status --probegateway status --require-rpc 会要求 RPC 真正可用。llama.cpp 官方提供 /v1/models。(Ollama Docs5)

bash 复制代码
# systemd 状态
sudo systemctl status ollama --no-pager
sudo systemctl status llama-server --no-pager
sudo systemctl status openclaw-gateway --no-pager

# Ollama
curl http://127.0.0.1:11434/api/tags

# llama.cpp
curl http://127.0.0.1:8080/v1/models

# OpenClaw
openclaw status
openclaw gateway status --require-rpc
openclaw doctor
openclaw channels status --probe

看日志:

bash 复制代码
journalctl -u ollama -e --no-pager
journalctl -u llama-server -e --no-pager
journalctl -u openclaw-gateway -e --no-pager

Ollama 官方 Linux 文档也明确给了 journalctl -e -u ollama 作为看日志的方法。(Ollama Docs1)


8)远程访问 Dashboard

OpenClaw 官方 Linux 路线和 Gateway CLI 都支持通过 SSH 隧道去连本地 loopback 绑定的 Gateway。(OpenClaw6)

在你的笔记本上:

bash 复制代码
ssh -N -L 18789:127.0.0.1:18789 <JETSON_USER>@<JETSON_IP>

然后打开:

text 复制代码
http://127.0.0.1:18789/

参考链接:

1: https://docs.ollama.com/linux "Linux - Ollama"

2: https://github.com/ggml-org/llama.cpp/blob/master/tools/server/README.md "llama.cpp/tools/server/README.md at master · ggml-org/llama.cpp · GitHub"

3: https://docs.openclaw.ai/start/setup "Setup - OpenClaw"

4: https://docs.openclaw.ai/cli/gateway "gateway - OpenClaw"

5: https://docs.ollama.com/api/introduction?utm_source=chatgpt.com "Introduction - Ollama"

6: https://docs.openclaw.ai/platforms/linux "Linux App - OpenClaw"

相关推荐
虹科网络安全2 小时前
解读CRA横向标准EN 40000系列:从法规文本到工程落地 | CRA合规之路(七)
网络·安全·web安全
奔跑中的小象4 小时前
统信UOS + 天数AI卡部署SGLang服务手册
人工智能·uos·sglang·天数智芯
DevSecOps选型指南4 小时前
中国版Mythos,为何是悬镜安全灵脉CodeAI?
人工智能·安全
Shockang5 小时前
LangGraph 状态机实战
人工智能
刹那芳华19925 小时前
循环神经网络的从零开始实现(RNN)
人工智能·rnn·深度学习
阿童木写作5 小时前
跨境图片翻译工具多合一,批量图片视频字幕翻译加智能抠图
人工智能·python·音视频·语音识别
科技之门5 小时前
AI3D从建模到贴图、绑骨和动画的完整流程怎么做?V2Fun完整工作流指南
人工智能·3d·贴图
宇宙第一小趴菜5 小时前
二、机器学习的应用领域和发展史
人工智能·机器学习
前端开发江鸟5 小时前
我写过 MCP Server,却一直以为 MCP 只有 Tool
人工智能
天国梦5 小时前
自习室智能化升级避坑指南:天学网AI智习室方案实测与选型建议
大数据·人工智能