我有一个ansible playbook来杀死正在运行的进程并且大部分时间工作都很好!但是,我们不时会发现无法杀死的进程,“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 }}"
谢谢!
答案 0 :(得分:27)
您可以忽略@act = Activity.includes(:campaign).order('created_at desc')
acts = []
@act.each do |item|
acts << item.attributes.merge({campaign_name: item.campaign.name})
end
上的错误并注册结果以强制终止失败的项目:
wait_for
答案 1 :(得分:4)
使用pkill
(1)代替grep
+ kill
。
答案 2 :(得分:2)
killall
命令具有一个可能有用的等待选项。
安装psmisc:
tasks:
- apt: pkg=psmisc state=present
然后像这样使用killall:
tasks:
- shell: "killall screen --wait"
ignore_errors: true # In case there is no process
-w, --wait
:
等待所有终止的进程终止。 killall每秒检查一次是否有任何被杀死的进程,如果没有,则仅返回。