我使用Ansible远程执行shell时出现意外行为。当我在远程计算机上执行以下命令时,结果是:
$ echo $(pgrep -f jboss)
13248
现在,如果我执行命令为Ansible shell,我会返回多个pid:
$ ansible jboss.servers -m shell -a 'echo $(pgrep -f jboss)' -u centos
10.3.9.155 | SUCCESS | rc=0 >>
13248 16362 16363
由于我需要进一步详细说明shell,我需要找到一种方法来获得与我在远程计算机上相同的结果。我试过了:
'echo $(pgrep -f jboss | awk '{ print $1 }')'
但这并不起作用,因为表达式已经是单引号。 有帮助吗?
答案 0 :(得分:1)
因为pgrep
也会返回Ansible进程。尝试:
ansible jboss.servers -m shell -a 'ps ax | grep jboss'
然后你知道为什么你得到额外的PID。解决此问题的一种方法是不使用pgrep
而是使用ps
和grep
。
ansible jboss.servers -m shell -a 'ps ax | grep [j]boss | cut -d " " -f2'