我想使用 ps、 dstat 等命令使用 anable-playbook 快速监视一些主机。ansible
命令本身完美地完成了我想要的任务,例如,我会使用:
ansible -m shell -a "ps -eo pcpu,user,args | sort -r -k1 | head -n5"
它可以很好地打印每个主机的所有 std 输出,如下所示:
localhost | success | rc=0 >>
0.0 root /sbin/init
0.0 root [kthreadd]
0.0 root [ksoftirqd/0]
0.0 root [migration/0]
otherhost | success | rc=0 >>
0.0 root /sbin/init
0.0 root [kthreadd]
0.0 root [ksoftirqd/0]
0.0 root [migration/0]
然而,这需要我为每一个不是很“可行”的任务保留一堆 shell 脚本,所以我把它放在一个剧本中:
---
-
hosts: all
gather_facts: no
tasks:
- shell: ps -eo pcpu,user,args | sort -r -k1 | head -n5
然后用 -vv
运行它,但是输出基本上显示了字典内容和换行并没有像这样打印出来,所以结果就是这样一团糟:
changed: [localhost] => {"changed": true, "cmd": "ps -eo pcpu,user,args | sort -r -k1
head -n5 ", "delta": "0:00:00.015337", "end": "2013-12-13 10:57:25.680708", "rc": 0,
"start": "2013-12-13 10:57:25.665371", "stderr": "", "stdout": "47.3 xxx Xvnc4 :24
-desktop xxx:24 (xxx) -auth /home/xxx/.Xauthority -geometry 1920x1200\n
....
我还尝试添加 register: var
和“ debug”任务来显示 {{ var.stdout }}
,但结果当然是一样的。
当通过剧本运行命令的 stdout/stderr 时,有没有一种方法可以获得格式很好的输出?我可以想到一些可能的方法(使用 sed 格式化输出?将输出重定向到主机上的文件,然后将该文件返回并回显到屏幕上?)但是以我对 shell/可能性的有限了解,我需要一天的时间才能尝试一下。