Проверьте, существует ли данное имя сервиса или нет и его статус с 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