web-dev-qa-db-ja.com

ansibleを使用して実行中のプロセスを強制終了するには?

実行中のプロセスを強制終了するための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 }}"

ありがとう!

14
Julio Fernandez

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 }}"
33
Eric Citaire