如何使用ansible终止正在运行的进程?

时间:2017-10-01 18:48:02

标签: process ansible kill ansible-2.x kill-process

我有一个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 }}"

谢谢!

3 个答案:

答案 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每秒检查一次是否有任何被杀死的进程,如果没有,则仅返回。