如何使用ansible杀死正在运行的进程?

Jul*_*dez 15 kill process kill-process ansible ansible-2.x

我有一个ansible playbook来杀死正在运行的进程并且在大多数情况下工作得很好!但是,我们不时会发现无法杀死的进程,"wait_for"进入超时,抛出错误并停止这个过程.

目前的解决方法是手动进入框中,使用"kill -9"并再次运行ansible playbook,所以我想知道是否有办法从ansible本身处理这个场景?我的意思是,我不想从一开始就使用kill -9但我可能是一种处理超时的方法?,即使只在进程没有在300秒内被杀死时使用kill -9?但最好的办法是什么?

这些是我目前的任务:

- name: Get running processes
  shell: "ps -ef | grep -v grep | grep -w {{ PROCESS }} | awk '{print $2}'"
  register: running_processes

- name: Kill running processes
  shell: "kill {{ item }}"
  with_items: "{{ running_processes.stdout_lines }}"

- name: Waiting until all running processes are killed
  wait_for:
    path: "/proc/{{ item }}/status"
    state: absent
  with_items: "{{ running_processes.stdout_lines }}"
Run Code Online (Sandbox Code Playgroud)

谢谢!

Eri*_*ire 35

您可以忽略错误wait_for并注册结果以强制终止失败的项目:

- name: Get running processes
  shell: "ps -ef | grep -v grep | grep -w {{ PROCESS }} | awk '{print $2}'"
  register: running_processes

- name: Kill running processes
  shell: "kill {{ item }}"
  with_items: "{{ running_processes.stdout_lines }}"

- wait_for:
    path: "/proc/{{ item }}/status"
    state: absent
  with_items: "{{ running_processes.stdout_lines }}"
  ignore_errors: yes
  register: killed_processes

- name: Force kill stuck processes
  shell: "kill -9 {{ item }}"
  with_items: "{{ killed_processes.results | select('failed') | map(attribute='item') | list }}"
Run Code Online (Sandbox Code Playgroud)


Sea*_*ean 5

使用pkill(1)而不是grep+ kill