ollama没有ollama.service

模型与算力

讲清 Linux 上为什么找不到 ollama.service,以及没有 systemd 单元时该怎么把 Ollama 跑起来、跑稳、开机自启。

在 Linux 上装完 Ollama,想用 systemctl status ollama 看一眼状态,结果提示 Unit ollama.service could not be found——很多人第一反应是装坏了。其实多半不是坏了,而是你的安装方式或发行版根本没给你这个单元文件。这篇按「先判断属于哪种情况,再选启动方式」的顺序讲,最后给一份排查与自启清单。

在 Linux 上装完 Ollama,敲 systemctl status ollama,回你一句 Unit ollama.service could not be found,第一反应通常是「装坏了」。多数情况下没坏,只是你的装法或发行版根本没提供这个单元文件。先别急着重装,重装一遍大概率还是同样一句话。

这篇按「先判断属于哪种情况,再选启动方式」的顺序讲。判断只用几条命令,选路只看你的场景是临时调试还是长期开机自启,最后给一份能照着走的排查清单。全程不需要你懂 systemd 内部原理,知道几个文件放哪就行。

先分清:是没装这个单元,还是你根本没装对

systemd 单元不属于 Ollama 本体。官方安装脚本、发行版包管理器、手动解压二进制,三种装法产出的东西不一样:有的会顺手放一个服务单元,有的只丢一个可执行文件。所以「命令能用、服务找不到」是很常见的组合,不代表安装残缺。

现象大概率原因下一步动作
systemctl 命令本身就不存在容器镜像、WSL、精简系统或非 systemd 发行版别找单元文件了,直接看下一节的三种起法
systemctl 能跑,但查不到 ollama 这个单元装法没带服务单元,或单元名不叫这个手动确认可执行文件位置,必要时自己写单元
单元存在但起不来路径、用户、环境变量对不上按日志逐条核对,先看监听和模型目录
  • 第一步看 systemctl 这条命令在不在,不在就说明系统不用 systemd 管服务,报同样的话完全正常
  • 第二步找可执行文件在哪,用 which 或直接看安装脚本落到哪个目录,systemd 只认绝对路径
  • 第三步在常见单元目录里搜一遍有没有含 ollama 字样的文件,确认是「没有」还是「名字不同」
  • 第四步再怀疑安装是否完整:能跑起来出字,就说明本体没问题,缺的只是服务包装

没有 service 的三种起法,按场景挑

选哪种起法只看两件事:你要跑多久,以及终端关了之后还需不需要它活着。临时验证和长期常驻,做法完全不同,硬套一种会给自己找麻烦。

  1. 前台手动起直接在终端执行可执行文件,日志就在屏幕上,报错第一时间能看到;适合调参和排障。缺点是终端一关进程就断,不能算常驻。
  2. 后台加日志用 nohup 或把输出重定向到文件,再让它后台跑。适合临时长时间占用;你要自己管进程号、自己看日志文件、自己处理日志变大,机器重启后也不会自己回来。
  3. 自己写一个服务单元手写一份单元文件放进系统级或用户级目录,交给 systemd 管生命周期,是长期跑最省事的路子。用户级单元不需要 root,但要留意登录会话退出后它还在不在。

不管选哪种,先把模型存放目录、监听地址、显卡选择这几项定死。手动跑时靠 shell 里临时的变量,一换终端或变成服务就丢,表现出来是「模型不见了」或者速度突然掉下来,其实只是环境不同。

把环境变量和服务绑在一起,避免重装后失联

环境变量是这类问题里最容易埋雷的地方。手动启动时它从当前 shell 继承,一旦改成服务启动,继承链断了,行为就跟之前不一样。所以长期用的配置不要靠 export,要写进服务自己的环境段或用户级环境文件。

监听地址与端口
决定别的程序能不能连上;写死成固定值,别让它每次随机变
模型存放目录
换过位置一定要同步改,并且确认新目录可写、磁盘放得下
可见的加速设备
不指定时可能悄悄回落到只用处理器,表现是速度突然变慢

权限问题特别容易误判:目录不可写时,拉模型往往不是报权限拒绝,而是报各种看不懂的失败。所以改完路径先手动在新目录里写一个文件试试,能写再继续。

  • 多用户机器上区分系统级和用户级服务,避免一个人的配置把另一个人的覆盖掉
  • 用户级服务要确认会话注销后是否继续运行,否则看着在跑、实际人一走就停
  • 重装或升级后回头核对一遍这几项变量,别默认它还在
  • 把这些配置记在一处,换机器时照抄,比事后靠回忆排查省时间

一份能照着走的排查与验收清单

排查顺序比记命令更重要。先确认「到底有没有在跑」,再确认「能不能正常出结果」,最后才验证「重启后还在不在」。顺序反了容易在错误的方向上花时间。

  1. 确认进程与端口先看进程在不在、端口通不通。很多人以为服务没起,其实起了,只是单元名查错了,或者进程以另一种方式在跑。
  2. 看日志手动起的看终端输出,交给 systemd 的看它的日志,自己写重定向的看那个日志文件。日志里的报错通常直接指向配置哪一项不对。
  3. 发一条最小请求进程活着不等于能用。发一条最小的请求,确认真的能返回结果,这才算通过。
  4. 重启一次机器验证自启是否真的生效。这里最容易翻车的是用户级服务依赖登录会话,人没登录它就没起来。

另外,如果你在意的是模型速度、显存占用这类实际表现,而不是启动方式本身,那排查方向完全不同,别把两件事混着做。想把配置和性能一起看,可以先到站内的工具目录里挑一个合适的检测方式,再对着数字判断。

下一步如果你已经跑通了,想顺带对照一下接口表现和中转方案的差异,站内的目录与价格追踪页能帮你把当前的选择放在同一张表里比较,省得来回翻文档。

常见问题

装了 Ollama 但没有 ollama.service,是不是装错了?

不一定。单元文件取决于安装方式和发行版,手动解压二进制、容器镜像、非 systemd 的系统都不会自带。先看 systemctl 在不在、有没有对应 unit,再决定是手写一个还是换启动方式;能正常出字就说明本体没问题。

自己写的 service 开机后没起来,从哪查?

先看这次是不是用户级单元——用户级服务常常要等登录会话,重启后没登录就不跑。再确认 unit 里的可执行文件路径写的是绝对路径、环境变量写在单元里而不是 shell 里,最后翻日志看具体报错。

手动前台能跑,做成服务就变慢,为什么?

多半是环境变量没带过去,比如模型目录和 GPU 可见设备丢了,服务回落到 CPU 或重新下载模型。把这些变量写进单元文件,重启服务后再打一条请求,对比耗时是否回到手动的水平。

本文依据各平台公开文档与官方公告整理,只做中文归纳;具体做法、参数与限制以官方文档为准。