Ansible:如果不成功,如何强制终止进程并退出 ansible-playbook?

Ansible:如果不成功,如何强制终止进程并退出 ansible-playbook?

我的剧本中有以下两项任务

  - 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 中实现目标,通常建议使用服务模块,servicesysvinit或者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),您可以查看如何获取命令/实用程序的退出代码(和/或返回代码)列表及其含义?

类似问答

出现相同的错误信息

相关内容