프로세스가 실행 중인지 확인할 수있는 작업


10

Ansible 2.1

플레이 북에서 프로세스를 시작했습니다.

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

재생 요약에서 프로세스가 성공적으로 시작된 것으로 나타납니다.

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

그러나 원격 호스트에 로그인하고을 수행 ps하면 프로세스가 실행되고 있지 않습니다. 프로세스 로그를 점검하는 중에 일부 전제 조건 (의도 된)에 실패했습니다.

프로세스가 성공적으로 시작되었는지 확인하기 위해 플레이 북에 작업을 작성하는 방법은 무엇입니까?

답변:


12

failed프로세스가 실행 중인지 확인하는 명령을 실행 한 후 Jinja2 필터로 확인할 수 있습니다 .

다음은 명령의 출력을 사용하여 systemctl status apache2Apache가 실행 중인지 여부를 결정 하는 예입니다 .

- 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

첫 번째 작업의 명령이 실패하면 두 번째 작업은 실패하고 첫 번째 작업이 실패한 이유를 보여줍니다.
리턴 코드는에 저장됩니다 service_apache_status.rc.

실패 출력 예 :

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)

pgrep프로세스를 실행 중인지 확인하기 위해을 사용하는 다른 방법 (아마도 덜 신뢰할 수도 있음) 이 있습니다.

- 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

어떻게 when: service_apache_status | failed작동합니까? failed토큰을 찾 service_apache_status습니까?
Howard Lee

2
@ HowardLee : 리턴 코드를 확인하고 그렇지 않으면로 0간주됩니다 failed.
Deltik

1
ps 대신 | grep you trypgrep apache2
madeddie

@ madeddie : 나는 그것을 좋아한다. 답변을 제안하여 업데이트했습니다 pgrep!
Deltik

4

이것이 내가 지금하는 일입니다.

- 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_when1.4에 도입되었습니다. changed_when: False변경 상태를 억제하는 데 사용됩니다. 더 읽어보십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.