首页 > 解决方案 > 使用 Ansible 查找进程数

问题描述

下面是我的剧本,它转储匹配的进程.*httpd.*|.*sjsws.*|.*java.*|.*docker.*|.*node.*

剧本:

   vars:
     grepelement: ".*httpd.*|.*sjsws.*|.*java.*|.*docker.*|.*node.*"

     - name: "Check processes on destination"
       ignore_errors: yes
       command: ps auxwww
       register: ps_out

     - set_fact:
         processdump: "{{ ps_out.stdout | regex_findall(grepelement) }}"

     - set_fact:
         processdumpcount: "{{ ps_out.stdout.split() | length }}"

不幸的是,虽然只有 4 个进程正在运行,但计数似乎打印了 1000 多个,这可能是输出中的字符数。

我也尝试了以下方法,但这也打印出比正在运行的进程数更多的内容。

     - set_fact:
         processdumpcount: "{{ ps_out.stdout_lines | length }}"

我可以command: ps auxwww | wc -l用作解决方案,但更喜欢使用单个ps命令的解决方案。

你能建议吗?

标签: countansibleprocessoutputps

解决方案


您需要检查processdump寄存器的长度以获取计数 ps_out.stdout_lines

  - set_fact:
      processdumpcount: "{{ processdump  | length }}"

请注意,它ps_out会保留系统上运行的所有进程,然后您正在使用ps_outregex_findall来过滤掉与processdump. 你需要注册lengthprocessdump

最小的工作示例:

我的系统进程计数:

 ps auxwww |wc -l
287
 ps auxwww |grep -E ".*httpd.*|.*sjsws.*|.*java.*|.*docker.*|.*node.*" |grep -v grep |wc -l
3

剧本:

---

- name: Sample playbook
  connection: local
  #  gather_facts: false
  hosts: localhost
  vars:
    grepelement: ".*httpd.*|.*sjsws.*|.*java.*|.*docker.*|.*node.*"
  tasks:
  - name: "Check processes on destination"
    ignore_errors: yes
    command: ps auxwww
    register: ps_out

  - set_fact:
     processdump: "{{ ps_out.stdout | regex_findall(grepelement) }}"

  - set_fact:
      processdumpcount: "{{ processdump  | length }}"

  - debug: msg="{{ processdumpcount }}"

以上剧本将导致:

PLAY [Sample playbook] **********************************************************************************************************************************************

TASK [Gathering Facts] **********************************************************************************************************************************************
ok: [localhost]

TASK [Check processes on destination] *******************************************************************************************************************************
changed: [localhost]

TASK [set_fact] *****************************************************************************************************************************************************
ok: [localhost]

TASK [set_fact] *****************************************************************************************************************************************************
ok: [localhost]

TASK [debug] ********************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "3"
}

PLAY RECAP **********************************************************************************************************************************************************
localhost                  : ok=5    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

推荐阅读