J'ai un playbook ansible pour tuer les processus en cours d'exécution et fonctionne très bien la plupart du temps !, cependant, de temps en temps, nous trouvons des processus qui ne peuvent tout simplement pas être tués, donc "wait_for" arrive à expiration, lance une erreur et s'arrête le processus.
La solution de contournement actuelle consiste à entrer manuellement dans la boîte, à utiliser "kill -9" et à réexécuter le livre de jeu ansible, donc je me demandais s'il y avait un moyen de gérer ce scénario à partir de ansible lui-même?, Je veux dire, je ne veux pas utiliser kill -9 depuis le début, mais je peux peut-être un moyen de gérer le délai d'expiration?, même d'utiliser kill -9 uniquement si le processus n'a pas été tué en 300 secondes? mais quelle serait la meilleure façon de le faire?
Ce sont les tâches que j'ai actuellement:
- 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 }}"
Merci!
Vous pouvez ignorer les erreurs sur wait_for
et enregistrez le résultat pour forcer la suppression des éléments ayant échoué:
- 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 }}"