在 Linux 服务器上运行 Ollama 时,直接执行 ollama serve 虽然简单,但终端关闭、进程异常退出或系统重启后,服务往往需要人工恢复。借助 systemd,可以把 Ollama 纳入系统服务管理,实现开机自动启动、故障自动重启、日志集中查看和权限隔离。下面结合实际配置,完整梳理部署流程。🚀
一、开始前的检查工作
首先确认 Ollama 已经安装,并找出可执行文件的真实路径:
ollama -v
which ollama
常见路径为 /usr/bin/ollama 或 /usr/local/bin/ollama。后续服务文件中的 ExecStart 必须使用真实的绝对路径,否则 systemd 可能提示 “No such file or directory”。如果尚未安装,可参考 Ollama Linux 官方文档完成部署。
如果系统已存在 Ollama 服务,可先检查状态,避免重复创建:
systemctl status ollama
systemctl cat ollama
二、创建独立运行账户
不建议长期使用 root 身份运行模型服务。可以创建一个不可登录的系统账户,并将其主目录设置为模型及运行数据的存放位置:
sudo useradd -r -s /bin/false -U -m -d /usr/share/ollama ollama
如果模型准备保存到其他磁盘,例如 /data/ollama/models,应提前创建目录并调整权限:
sudo mkdir -p /data/ollama/models
sudo chown -R ollama:ollama /data/ollama
使用独立账户的好处是限制进程可访问的系统资源,即使服务出现异常,也能降低误操作其他目录的风险。🔐
三、编写 systemd 服务文件
创建 /etc/systemd/system/ollama.service:
sudo nano /etc/systemd/system/ollama.service
写入以下内容,并根据实际安装路径修改 ExecStart:
[Unit]
Description=Ollama Service
Wants=network-online.target
After=network-online.target
StartLimitIntervalSec=60
StartLimitBurst=5
[Service]
Type=simple
User=ollama
Group=ollama
ExecStart=/usr/bin/ollama serve
Restart=on-failure
RestartSec=5s
Environment="HOME=/usr/share/ollama"
Environment="OLLAMA_MODELS=/data/ollama/models"
[Install]
WantedBy=multi-user.target
关键参数说明
- After=network-online.target:让服务在网络进入可用状态后启动。
- User 与 Group:指定 Ollama 使用独立账户运行。
- Restart=on-failure:当进程异常退出、被异常信号终止或启动失败时尝试恢复;管理员执行正常停止时不会强行拉起。
- RestartSec=5s:失败后等待 5 秒再重启,避免瞬间形成高频重启循环。
- StartLimitIntervalSec 与 StartLimitBurst:限制一定时间内的启动次数,防止配置错误持续消耗 CPU 和日志空间。
- WantedBy=multi-user.target:使服务能够加入常规多用户启动流程。
Ollama 官方示例使用 Restart=always,适合要求进程持续运行的环境;实践中也可以选择 on-failure,便于维护时正常停止服务。具体策略应结合业务需求决定。
四、加载配置并启用开机自启
保存服务文件后,执行以下命令:
sudo systemctl daemon-reload
sudo systemctl enable --now ollama
daemon-reload 用于通知 systemd 重新读取单元文件;enable --now 会同时设置开机自启并立即启动服务。随后检查运行状态:
systemctl status ollama --no-pager
systemctl is-enabled ollama
systemctl is-active ollama
如果分别看到 enabled 和 active,说明开机自启与当前运行状态均已生效。✅
五、验证故障自动重启
为了确认重启策略有效,可以先查询主进程 PID:
systemctl show ollama -p MainPID
记录 PID 后模拟异常终止:
sudo kill -9 PID
sleep 6
systemctl status ollama --no-pager
将 PID 替换为实际数字。若服务重新显示为 active (running),并且 MainPID 已发生变化,说明 systemd 成功拉起了新的 Ollama 进程。该测试应避开正在处理重要请求的生产时段。🧪
六、查看日志与排查常见问题
systemd 管理的标准输出和错误信息会进入 journal,可使用以下命令查看:
journalctl -u ollama -n 100 --no-pager
journalctl -u ollama -f
如果服务无法启动,可优先检查以下项目:
- 启动路径错误:使用 which ollama 确认路径,并同步修改 ExecStart。
- 目录权限不足:确认 ollama 用户对模型目录拥有读取、写入和进入权限。
- 端口被占用:检查是否已有手工启动的 ollama serve 进程。
- 环境变量未生效:修改配置后必须执行 daemon-reload,再重启服务。
- 触发启动频率限制:修复错误后执行 systemctl reset-failed ollama,然后重新启动。
sudo systemctl daemon-reload
sudo systemctl reset-failed ollama
sudo systemctl restart ollama
七、使用覆盖配置降低维护风险
如果安装程序已经提供 ollama.service,不建议直接修改软件包自带文件,以免升级时被覆盖。可以执行:
sudo systemctl edit ollama
然后仅添加需要调整的内容,例如监听地址或模型目录:
[Service]
Environment="OLLAMA_HOST=127.0.0.1:11434"
Environment="OLLAMA_MODELS=/data/ollama/models"
保存后重新加载并重启。若确实需要向局域网开放监听地址,还应配合防火墙、反向代理和访问控制措施,不能只修改绑定地址便直接暴露到公网。⚠️
总结
通过 systemd 管理 Ollama,核心步骤包括确认程序路径、创建独立账户、配置服务单元、启用开机自启、设置合理的故障重启策略,以及使用 journal 持续观察日志。完成这些设置后,Ollama 就能从临时运行的命令行程序转变为可维护、可恢复的系统服务。自动重启只能缩短偶发故障造成的中断时间,若服务频繁退出,仍应继续检查模型目录权限、内存与显存资源、驱动状态及程序日志,找到并解决根本原因。