现场是这样的。CentOS 7.9 上服务跑在 app 用户下,运维清理离职账号时 userdel 了 app,之后 systemctl start web 报 Failed to determine user credentials: No such process,unit 直接 failed,日志里只有这一行。

中间走过弯路,把「NSS 走了 LDAP,服务启动时目录服务不可达」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。unit 里 User=app 指定的账号已经被删除;账号还在但 shell 被改成 nologin,补充组也丢了;unit 用了 DynamicUser 但目录权限不允许临时用户访问。

动手时先确认 unit 里指定的用户和组

systemctl cat web | grep -E 'User|Group'

随后查账号是否还存在

id app; getent passwd app

接着重建系统账号并修正属主

useradd -r -s /sbin/nologin app && chown -R app:app /var/lib/web

等前面都确认过,再重载后启动并查看状态

systemctl daemon-reload && systemctl start web && systemctl status web --no-pager

中途换过一次思路,把范围缩到最小的那一层,反而快了。

别只看报错消失,验证要多做一步。服务状态变成 active (running),日志里不再出现 Failed to determine user credentials,业务端口可以访问。

这里还有个坑。删账号前先用 systemctl list-units 查有没有服务在用它,账号删了服务不会立刻挂,下次重启才爆。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189