使用 NSSM API 检查给定的服务名称是否存在及其状态

Check if a given service name exist or not and its status with NSSM API

我正在尝试构建一种自包含系统,我将我的应用程序可执行文件复制到一个地方,运行 服务作为独立应用程序,无需安装。我正在使用 NSSM 可执行文件在 windows 服务器 2012 R2 和一台机器上创建服务,将会有很多可部署的东西。 我的问题是,在使用 Ansible 进行自动化部署时,我被困在需要知道给定服务名称是否已经存在的地步,如果是,它的状态是什么? NSSM 中似乎没有任何 API 来检查。 如果服务存在,我如何通过命令行询问 NSSM? 我可以通过命令行(无 powershell)检查服务的存在和状态吗?

好吧,无法仅通过 NSSM 获取服务详细信息,所以我想出了一些其他方法来获取 windows ansible 中的服务详细信息:

1) 使用 sc.exe 命令 util sc 实用程序可以查询 windows 机器以获取有关给定服务名称的详细信息。我们可以在变量中注册这个查询的结果,并在条件中的其他任务中使用它。

---
- hosts: windows
  tasks:
    - name: Check if the service exists
      raw: cmd /c sc query serviceName
      register: result

    - debug: msg="{{result}}"

2) 使用获取服务 Powershell 命令 'Get-Service' 可以为您提供有关服务的详细信息,就像 sc util:

---
- hosts: windows
  tasks:
    - name: Check if the service exists
      raw: Get-Service serviceName -ErrorAction SilentlyContinue
      register: result

    - debug: msg="{{result}}"

3) win_service 模块(推荐) Ansible 的模块 win_service 可用于通过不指定任何操作来简单地获取服务详细信息。唯一的问题是当服务不存在时任务将失败的情况。可以使用 failed_when 或 ignore_errors.

来反击
---
- hosts: windows
  tasks:
     - name: check services
      win_service:
          name: serviceName
      register: result
      failed_when: result is not defined
      #ignore_errors: yes

    - debug: msg="{{result}}"

    - debug: msg="running"
      when: result.state is not defined or result.name is not defined