事情本身不复杂,线索都在日志里。在 Windows Server 2022 上用 nssm 把 ollama serve 注册成服务,启动时报 错误 1067 进程意外终止,手工在 PowerShell 里执行同一个 exe 完全正常,日志里只有一行 listening on 127.0.0.1:11434。

第一反应是「端口已被桌面版 Ollama 的托盘进程占用」,验证下来不成立。

把日志和配置对完,能解释这个现象的基本就这几处。服务账户是 LocalSystem,读不到用户目录下的 OLLAMA_MODELS。少数情况下是工作目录没设置,相对路径的模型目录解析失败。

另外,服务启动超时太短,模型索引还没建完就被判失败。

第一件事是查一下 11434 被哪个进程占着

Get-NetTCPConnection -LocalPort 11434 | Select-Object OwningProcess

给服务显式指定模型目录

nssm set ollama AppEnvironmentExtra OLLAMA_MODELS=D:\ollama\models

再往下把服务账户换成有权限的本地账户

nssm set ollama ObjectName .\ollama_svc 密码

末了重启服务再看事件日志里的退出码

Restart-Service ollama; Get-EventLog -LogName Application -Newest 20

怎么算真的好了,看的是同一批现象。服务状态显示 Running,浏览器访问 http://127.0.0.1:11434/api/tags 能返回 JSON,整机重启后服务自动拉起。

提醒一点。1067 是通用退出码,真正原因要去事件查看器里找 ollama.exe 那一条,光看服务面板看不出来。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189