Проверьте, существует ли данное имя сервиса или нет и его статус с NSSM API

Я пытаюсь создать своего рода автономную систему, где я копирую исполняемые файлы своего приложения и запускаю сервисы как автономные приложения, без установки. Я использую исполняемый файл NSSM для создания служб в Windows Server 2012 R2 и на одной машине будет много развертываемых. Моя проблема заключается в том, что при автоматизации развертывания с помощью Ansible я застрял в точке, где мне нужно знать, существует ли уже заданное имя службы и если да, каково его состояние? Кажется, в NSSM нет никакого API, чтобы проверить это. Как я могу спросить NSSM через командную строку, что если сервис существует? Могу ли я проверить наличие и статус службы через командную строку (без powershell)?

1 ответ

Решение

Ну, нет способа получить подробности обслуживания только через NSSM, поэтому я нашел несколько других способов получить подробности службы windows в ansible:

1) С помощью команды sc.exe утилита утилит sc может запросить у машины Windows информацию о заданном имени службы. Мы можем зарегистрировать результаты этого запроса в переменной и использовать его в других задачах в условиях.

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

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

2) С помощью команды Get-Service 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
Другие вопросы по тегам