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

标签 process ansible kill ansible-2.x kill-process

我有一个 Ansible 剧本来杀死正在运行的进程,并且在大多数情况下都工作得很好!但是,有时我们会发现无法杀死的进程,因此“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 }}"

谢谢!

最佳答案

您可以忽略 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 }}"

关于process - 如何使用ansible杀死正在运行的进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46515704/

相关文章:

python - 杀死所有锁定文件的进程

linux - 从 bash 按名称访问 procfs 中的进程

Java 进程 - 无法解压缩 zip 文件

azure - 预配和配置 - Azure 云

linux - Bash 脚本遍历 PID 并杀死项目

c# - 在当前终端执行命令,无需打开新终端。

Awk 分别打印文件中的每一行

shell - 如何在 Ansible playbook 中简洁地提取或合并哈希值

Android - 单击按钮关闭 Activity

linux - Linux 上的 killproc 和 pidofproc