早上机房一台 2019 的服务器蓝屏重启,事件查看器里一堆来源 Service Control Manager 的 7000 和 7031,服务名是某某安全组件。只看这几条,只能知道服务没起来,还得往下挖。

这几个错误码的意思

SCM 是 Windows 管服务的总开关,开机按依赖顺序拉起服务。7001 是依赖的服务起不来导致它也没起来;7000 是服务自身启动超时或返回错误;7009 是 30 秒内没响应启动请求;7031 是服务异常崩溃被强制重启;7034 是意外退出但不重启。查的时候先记码号,别只看红色感叹号。

先看它依赖谁

服务属性里的依存关系页,列出了它要先启动的前置服务。前置服务没起来,后面一串全挂,修前置那个就行。常见的是网络相关服务依赖 Nsi 或 RpcSs,开机顺序乱了会报 7001。开机同时装了两个杀毒,互相拦驱动,日志里就是一串 7000。

从服务自身往下查

  • 路径:可执行文件路径指错盘符,卸载重装后经常发生。
  • 账号:用域账号跑服务,密码改了没同步,报登录失败。
  • 权限:NT SERVICE 账号对数据目录没写权限,启动两秒就退。
  • 版本:驱动签名不对的新版系统上,旧驱动直接被拦。

超时类问题的处理

机械硬盘的服务器,杀毒和数据库同时开机,很容易 7009。把非核心服务的启动类型改成自动(延迟启动),注册表 ServicesPipeTimeout 默认 30 秒,慢机器可以加到 60 秒。别一上来就加注册表,先看是哪个服务拖慢了开机。

什么时候该警惕

SCM 错误伴随 1000 应用错误、BugCheck 蓝屏,或者某个陌生服务反复崩溃重启,这就不是配置问题了,先抓内存转储和杀毒扫描。单纯开机慢导致的 7009,机器进系统后服务能手动起来,调启动顺序就行。