背景
我正在编写Ansible剧本,以使用Ansible的shell模块检测远程节点上正在运行的进程。
ps aux
和pgrep
表示该进程未运行ps aux
和pgrep
的命令提升为root提示进程正在运行(预期结果)问题
为什么通过Ansible运行ps aux
和pgrep
与在远程节点中运行这些命令相比,会产生不同的结果?
此外,为什么通过Ansible运行ps aux | grep running_process
会每行显示两次,但是ID不同?
我最关心的是在这里了解Ansible / shell的运行情况(尽管如果我能找到检测运行过程的解决方案也很好)。
剧本任务
- name: grep for running_process
shell: ps aux | grep running_process
ignore_errors: yes
become: yes
check_mode: no
register: grep_result
- name: pgrep for running_process
shell: pgrep running_process
ignore_errors: yes
become: yes
check_mode: no
register: pgrep_result
Playbook Grep结果
"stdout_lines": [
"root 18225 ... /bin/sh -c ps aux | grep running_process",
"root 18226 ... /bin/sh -c ps aux | grep running_process",
"root 18232 ... grep running_process",
"root 18233 ... grep running_process"
]
Playbook Pgrep结果
"rc": 1,
"stdout": "",
SSH结果
[root@host user]# /bin/sh -c "ps aux | grep running_process"
nobody ... running_process ...
root ... /bin/sh -c ps aux | grep running_process
root ... grep running_process
[root@host user]# /bin/sh -c "pgrep running_process"
12345