2016-12-21 102 views
1


從Ansible遠程執行shell時出現意外的行爲。當我在遠程機器上執行下面的命令,結果是:Ansible shell返回多個值

$ echo $(pgrep -f jboss) 
13248 

現在如果我執行的Ansible殼我得到的回報倍數的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 }')' 

但是這不起作用,因爲表達式已經在單引號中。 有什麼幫助嗎?

回答

1

因爲pgrep也返回Ansible進程。嘗試:

ansible jboss.servers -m shell -a 'ps ax | grep jboss' 

然後你知道你爲什麼要獲得額外的PID。解決這個問題的一種方法是不使用pgrep,而是使用psgrep

ansible jboss.servers -m shell -a 'ps ax | grep [j]boss | cut -d " " -f2' 
+0

非常感謝。我只是將列更改爲f1(否則返回tty)。現在它就像一個魅力! –