sc failure 是什么
服务崩溃后要不要自动拉起来、拉几次、间隔多久,都由服务的恢复策略决定,sc failure 就是配置它的命令。它支持为第一次失败、第二次失败与后续失败分别指定动作,动作可以是重启服务、重启计算机或用 run 执行一条命令。counter reset 周期决定多久把失败计数归零,避免服务偶发失败就被累计到第三次动作。
基本信息
| 适用平台 | Windows 客户端与服务器;需管理员权限 |
|---|---|
| 语法 | sc failure <服务名> reset= <秒> actions= <动作>/<毫秒>/… [command= <命令>] |
| 动作取值 | restart 重启服务、run 执行命令、reboot 重启计算机、takeown 接管自身 |
| 时间单位 | 毫秒,60000 即 60 秒 |
| 查看语法 | sc qfailure <服务名> |
| GUI 对位 | 服务属性 → 恢复 选项卡 |
典型使用场景
- 关键常驻服务崩溃后自动拉起,缩短业务中断时间
- 为反复崩溃的服务设置递延重启间隔,避免频繁重启放大问题
- 配置失败时执行告警脚本,通知值班人员
- 排查服务恢复策略是否被改动,用 qfailure 复核现状
- 部署新服务时按规范一并配置恢复策略,避免上线后无人值守
常用示例
常用示例
sc failure MySvc reset= 900 actions= restart/60000/restart/60000/restart/60000 # 三次失败都重启,间隔 60 秒
sc qfailure MySvc # 复核当前恢复策略
sc failure MySvc reset= 3600 actions= restart/30000/run/30000/run/30000 command= "C:\ops\alert.cmd" # 后两次执行告警脚本
sc config MySvc start= auto # 配套:确保启动类型为自动
sc lock MySvc # 临时锁住服务配置,防止被改
sc qc MySvc | Select-String SERVICE_START_NAME # 核对运行账户参数读法
| 参数 | 含义 | 注意点 |
|---|---|---|
| reset= | 失败计数重置周期(秒) | 到期后失败次数归零 |
| restart/毫秒 | 等待后重启服务 | 单位是毫秒,别写成秒 |
| run/毫秒 | 等待后执行命令 | 以服务账户权限运行 |
| reboot/毫秒 | 等待后重启计算机 | 影响整机,慎用 |
| command= | run 动作要执行的命令 | 路径与权限都要确认 |
恢复策略与退出码相关:服务进程正常退出(返回 0)通常不触发失败动作,只有异常退出才会计数。排查“配了自动重启却没重启”时先看退出码与事件日志里的服务失败记录。
actions 里用 run 时,命令以服务的运行账户(默认 LocalSystem)执行,相当于给这个服务挂了一个高权限触发器。命令路径要放在受保护目录并限制可写权限,避免被替换利用。