Windows服务管理

2021/4/4·19 views

一、前置说明

  1. 图形化入口:Win+R 输入 services.msc 打开系统服务管理器,但功能有限,批量/自动化操作推荐命令行;
  2. 所有命令行操作必须管理员权限:运行窗口输入 cmd,按下 Ctrl+Shift+Enter 打开管理员终端;
  3. 工具分类:net(简易启停)、sc(系统原生完整服务管理)、NSSM(第三方工具,普通exe封装为服务)。

二、Chocolatey 快速安装NSSM

Chocolatey是Windows包管理器,执行 choco install nginx 时会自动附带安装nssm;
官网:https://chocolatey.org/install

三、NSSM(推荐,普通程序转Windows服务)

核心优势

  1. 支持任意exe(控制台程序、带界面程序均可);
  2. 图形界面可视化配置、命令行静默配置双模式;
  3. 自带进程守护,程序崩溃可自动重启;
  4. 同类工具对比:比微软srvany更简单、功能更强。
    下载地址:https://nssm.cc/download

基础命令

cmd 复制代码
nssm install servername    # 弹出图形界面创建服务
nssm start servername      # 启动服务
nssm stop servername       # 停止服务
nssm restart servername    # 重启服务
nssm remove servername     # 删除服务
nssm edit servername       # 弹出窗口修改服务配置
nssm set servername 参数名 参数值 # 命令行设置服务参数

图形界面安装Nginx示例配置项

  1. Path:程序exe完整路径;
  2. Startup directory:程序所在工作目录;
  3. Arguments:程序运行启动参数;
  4. Service name:系统内服务标识名称;
    配置完成点击 install service,即可在services.msc中查看。

四、net 命令(简易启停,无法操作禁用服务)

仅用于启停未禁用的服务,功能极简:

cmd 复制代码
net start 服务名   # 启动服务
net stop 服务名    # 停止服务

五、sc 系统原生工具(完整管控,可修改禁用服务)

Windows自带服务控制工具,支持创建、修改启动类型、查询、删除服务,可处理禁用状态服务。

常用命令

cmd 复制代码
sc config 服务名 start= demand     # 手动启动
sc config 服务名 start= auto       # 开机自动启动
sc config 服务名 start= disabled    # 禁用服务
sc start 服务名                    # 启动服务
sc stop 服务名                     # 停止服务
sc query 服务名                    # 查询服务运行状态
sc delete 服务名                   # 删除服务
sc qc 服务名                       # 查看服务详细配置
sc create 服务名 binPath=xxx.exe   # 新建自定义服务

补充扩展(原文缺失实用内容)

1. 三类工具适用场景区分

  1. NSSM:Node、Java、Python、Nginx等普通exe脚本程序封装成后台服务,需要崩溃自动重启、日志输出;
  2. sc:纯脚本自动化部署、无图形界面环境、修改系统内置服务启动类型;
  3. net:日常快速启停系统自带服务(MySQL、Redis等)。

2. NSSM静默部署示例(无弹窗)

cmd 复制代码
# 1. 创建服务
nssm install MyServer
# 2. 配置程序路径、工作目录、日志
nssm set MyServer Application "D:\app\server.exe"
nssm set MyServer AppDirectory "D:\app"
nssm set MyServer AppStdout "D:\app\logs\out.log"
# 3. 启动服务
nssm start MyServer

3. sc命令注意事项

binPath=start= 等参数等号后必须带空格,路径含空格需双引号包裹。
示例:

cmd 复制代码
sc create MyService binPath= "D:\Tools\app.exe" start= auto

4. 关键避坑点

  1. 非管理员执行命令会直接权限报错;
  2. NSSM封装程序必须填写正确Startup directory,否则程序读取配置文件失败;
  3. net 无法操作禁用服务,禁用服务只能用 sc start
  4. 删除NSSM服务时,如需确认弹窗:nssm remove 服务名 confirm