ภารกิจที่ต้องตรวจสอบเพื่อยืนยันว่ากระบวนการกำลังทำงานอยู่หรือไม่


10

Ansible 2.1

ใน playbook ฉันเริ่มกระบวนการ:

- 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กระบวนการจะไม่ทำงาน การตรวจสอบบันทึกกระบวนการมันล้มเหลวบางสิ่งที่ต้องมีก่อน (ตั้งใจ)

ฉันจะเขียนงานใน playbook เพื่อยืนยันกระบวนการเริ่มต้นได้อย่างไร

คำตอบ:


12

คุณสามารถตรวจสอบกับfailedตัวกรอง Jinja2 หลังจากรันคำสั่งของคุณที่ตรวจสอบว่ากระบวนการกำลังทำงานอยู่หรือไม่

นี่คือตัวอย่างที่ใช้เอาต์พุตของคำสั่งsystemctl status apache2เพื่อตัดสินใจว่า Apache กำลังรันอยู่หรือไม่:

- 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 คุณสามารถลองpgrep 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_whenเปิดตัวใน 1.4 changed_when: Falseใช้เพื่อไม่แสดงสถานะการเปลี่ยนแปลง อ่านเพิ่มเติม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.