Bạn có thể kiểm tra với failed
bộ lọc Jinja2 sau khi chạy lệnh để kiểm tra xem quy trình có đang chạy hay không.
Dưới đây là một ví dụ sử dụng đầu ra của lệnh systemctl status apache2
để quyết định xem Apache có đang chạy hay không:
- 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
Nếu lệnh của nhiệm vụ đầu tiên thất bại, nhiệm vụ thứ hai sẽ thất bại và cho thấy tại sao nhiệm vụ đầu tiên thất bại.
Mã trả lại được lưu trữ trong service_apache_status.rc
.
Ví dụ đầu ra của một thất bại:
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)
Đây là cách khác nhau (mặc dù có thể kém tin cậy hơn), bằng cách sử dụng pgrep
, để kiểm tra xem quy trình có đang chạy hay không:
- 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
làm việc? Nó tìm kiếm mộtfailed
mã thông báo trongservice_apache_status
?