![Ansible:如果不成功,如何强制终止进程并退出 ansible-playbook?](https://linux22.com/image/772517/Ansible%EF%BC%9A%E5%A6%82%E6%9E%9C%E4%B8%8D%E6%88%90%E5%8A%9F%EF%BC%8C%E5%A6%82%E4%BD%95%E5%BC%BA%E5%88%B6%E7%BB%88%E6%AD%A2%E8%BF%9B%E7%A8%8B%E5%B9%B6%E9%80%80%E5%87%BA%20ansible-playbook%EF%BC%9F.png)
我的剧本中有以下两项任务
- name: "Verify httpd.service no running on node {{ ansible_hostname }}"
shell: "ps -ef | grep httpd"
register: _ps_httpd
become: true
- name: stop httpd is exit code eq to 0
shell: "kill -9 $(ps -ef | grep httpd| awk '{print $2}')"
when: _ps_httpd.rc == 0
become: true
ignore_errors: true
这两个任务应该强制终止进程。目前我收到错误
"msg": "non-zero return code", "rc": -9
我在这里错过了什么?有什么想法可以解决这个问题吗?
ansible-playbook
此外,如果不成功,我想添加退出运行的选项。
答案1
为了在 Ansible 中实现目标,通常建议使用服务模块,service
,sysvinit
或者systemd
. 例如
---
- hosts: localhost
become: yes
become_method: sudo
gather_facts: yes
tasks:
- name: Gathering Service Facts
service_facts:
- name: Make sure service is stopped
systemd:
name: httpd
state: stopped
enabled: no
when: ("httpd.service" in services)
如果您喜欢使用shell
_module,对我来说还需要做更多的工作。
例如,nginx
首先获取正确的 PID,因为有一个主进程和四个工作进程。
- name: Get nginx PID
shell:
cmd: "ps -C nginx -o pid --no-headers | head 1"
warn: false
changed_when: false
check_mode: false
register: nginx_pid
也可以这样做
- name: Get nginx PIDs
shell:
cmd: "pidof nginx"
warn: false
changed_when: false
check_mode: false
register: nginx_pids
- name: Show PIDs
debug:
var: nginx_pids
- name: Kill nginx
shell:
cmd: "kill -9 {{ nginx_pids }}"
...
关于
如果不成功,我想添加从 ansible-playbook 运行退出的选项。
到结束剧本运行你可以使用
- meta: end_play
when: condition_is_met
使用fail
_module 到
- name: Task has failed because of
fail:
msg: "{{ fail_message }}"
when: condition_is_met
或者assert
_模块。
关于退出代码(EC)或返回代码(RC),您可以查看如何获取命令/实用程序的退出代码(和/或返回代码)列表及其含义?。
类似问答
出现相同的错误信息