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