Tarefa possível para confirmar se um processo está em execução


10

Resolvido 2.1

No manual, iniciei um processo:

- name: Start Automation Agent, and enable start on boot
  service: name=mongodb-mms-automation-agent state=started enabled=yes

Na recapitulação da reprodução, parece que o processo foi iniciado com êxito.

TASK [install : Start automation agent, and enable start on boot] **************
changed: [server1]

No entanto, ao efetuar login no host remoto e psexecutar a, o processo não está sendo executado. A verificação no log do processo falhou em algum pré-requisito (pretendido).

Como escrevo uma tarefa em um manual para confirmar que o processo foi iniciado com êxito?

Respostas:


12

Você pode verificar com o failedfiltro Jinja2 depois de executar o comando que verifica se o processo está em execução.

Aqui está um exemplo que usa a saída do comando systemctl status apache2para decidir se o Apache está sendo executado:

- name: Check if Apache is running
  command: systemctl status apache2
  ignore_errors: yes
  changed_when: false
  register: service_apache_status

- name: Report status of Apache
  fail:
    msg: |
      Service apache2 is not running.
      Output of `systemctl status apache2`:
      {{ service_apache_status.stdout }}
      {{ service_apache_status.stderr }}
  when: service_apache_status | failed

Se o comando da primeira tarefa falhar, a segunda tarefa falhará e mostrará por que a primeira tarefa falhou.
O código de retorno é armazenado em service_apache_status.rc.

Exemplo de saída de uma falha:

TASK: [Check if Apache is running] *********************** 
failed: [localhost] => {"changed": false, "cmd": ["systemctl", "status", "apache2"], "delta": "0:00:00.009379", "end": "2016-06-06 15:17:27.827172", "rc": 3, "start": "2016-06-06 15:17:27.817793", "stdout_lines": ["* apache2.service", "   Loaded: not-found (Reason: No such file or directory)", "   Active: inactive (dead)"], "warnings": []}
stdout: * apache2.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)
...ignoring

TASK: [Report status of Apache] ***************************
failed: [localhost] => {"failed": true}
msg: apache2 is not running
systemctl status apache2 output:
* apache2.service
   Loaded: not-found (Reason: No such file or directory)
   Active: inactive (dead)

Aqui está uma maneira diferente (embora possivelmente menos confiável), usando pgrep, para verificar se o processo está em execução:

- name: Check if Apache is running
  shell: pgrep apache2
  ignore_errors: yes
  changed_when: false
  register: service_apache_status

- name: Report status of Apache
  fail:
    msg: |
      Service apache2 is not running.
      Return code from `pgrep`:
      {{ service_apache_status.rc }}
  when: service_apache_status.rc != 0

Como when: service_apache_status | failedfunciona? Procura um failedtoken service_apache_status?
Howard Lee

2
@ HowardLee: Eu acredito que ele verifica o código de retorno e, se não for 0, é considerado failed.
precisa saber é o seguinte

11
em vez de ps | grep você poderia tentarpgrep apache2
madeddie 29/03/19

@ madeddie: eu gosto. Resposta atualizada para sugerir pgrep!
Deltik 29/03/19

4

Isto é o que eu faço agora:

- name: Confirm Automation Agent is running
  command: service mongodb-mms-automation-agent status
  register: agent_status
  failed_when: "'NOT' in agent_status.stdout"
  changed_when: False

failed_whené introduzido no 1.4. changed_when: Falseé usado para suprimir o status da mudança. Leia mais .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.