2017-10-01 51 views
3

私は実行中のプロセスを殺すためのプレイブックを持っていますが、ほとんどの時間は大変効果的です!しかし、時々、殺すことのできないプロセスが見つかると、「wait_for」がタイムアウトになり、エラーがスローされ、プロセスを停止します。実行中のプロセスを強制的に強制終了するには?

現時点での回避策は、手動でボックスに入り、 "kill -9"を使用して再度プレイ可能なプレイブックを実行して、このシナリオを不可能なものから処理する方法があるかどうか疑問に思っていましたか?最初から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 }}" 

ありがとう:

これらは私が現在持っているタスクです!

答えて

6

あなたは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 }}" 
+0

は、エリックをありがとう! –

関連する問題