2016-12-21 4 views
1


Я получаю неожиданное поведение от выполнения оболочки удаленно с помощью Ansible. Когда я выполнить следующую команду на удаленной машине, результат:Ansible shell возвращает несколько значений

$ echo $(pgrep -f jboss) 
13248 

Теперь, если я выполнить команду в качестве анзибль оболочки я получаю, как вернуть несколько PIDs:

$ ansible jboss.servers -m shell -a 'echo $(pgrep -f jboss)' -u centos 
10.3.9.155 | SUCCESS | rc=0 >> 
13248 16362 16363 

Как мне нужно дальше уточните оболочку, мне нужно найти способ получить тот же результат, как если бы я был на удаленной машине. Я пробовал с:

'echo $(pgrep -f jboss | awk '{ print $1 }')' 

Но это не работает, потому что выражение уже в одинарных кавычках. Любая помощь?

ответ

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' 
+0

Большое спасибо. Мне нужно было просто изменить столбец f1 (иначе tty будет возвращен). Теперь это работает как шарм! –

Смежные вопросы