Ansible command
模块
一、简介
- 功能:
command
模块用于在远程主机上执行指定的命令。它是 Ansible 中最基础的模块之一,不依赖于 shell 解释器,因此它不支持 shell 特性(如管道、重定向、环境变量等)。 - 使用场景:适用于执行简单的命令,如查看文件内容、检查系统状态等,而不需要 shell 的复杂功能。
二、基本用法
2.1 语法
ansible <pattern> -m command -a "<command>"
<pattern>
:指定要操作的主机或主机组,例如all
、webservers
。-m command
:指定使用command
模块。-a "<command>"
:提供要执行的命令作为参数。
2.2 示例
-
在所有主机上执行
uptime
命令:ansible all -m command -a "uptime"
- 解释:在所有主机上执行
uptime
命令,返回系统的运行时间。
- 解释:在所有主机上执行
-
在特定主机组上列出
/var/log
目录内容:ansible webservers -m command -a "ls -l /var/log"
- 解释:在
webservers
组中的主机上执行ls -l /var/log
命令,列出该目录下的文件和目录的详细信息。
- 解释:在
-
在单个主机上检查指定文件的内容:
ansible web1.example.com -m command -a "cat /etc/hosts"
- 解释:在
web1.example.com
主机上执行cat /etc/hosts
命令,查看hosts
文件的内容。
- 解释:在
三、输出结果
执行 command
模块后的典型输出示例:
web1.example.com | CHANGED | rc=0 >>
12:00:01 up 10 days, 5:01, 1 user, load average: 0.00, 0.01, 0.05
CHANGED
:表示命令执行成功并产生了输出。rc=0
:表示返回码为0
,命令执行成功。>>
:后续内容为命令的标准输出。
如果命令执行失败,例如输入错误的命令,会返回如下示例错误:
web1.example.com | FAILED | rc=127 >>
/bin/sh: badcommand: command not found
FAILED
:表示命令执行失败。rc=127
:表示返回码为127
,通常表示命令未找到。- 错误信息:显示具体的错误原因,如命令未找到。
四、常见选项
4.1 chdir
-
功能:指定命令执行前要切换到的目录。
-
用法:
ansible all -m command -a "chdir=/tmp ls -l"
- 解释:在所有主机上切换到
/tmp
目录,然后执行ls -l
命令。
- 解释:在所有主机上切换到
4.2 creates
-
功能:在指定的文件或目录存在时,跳过命令执行。
-
用法:
ansible all -m command -a "creates=/tmp/somefile touch /tmp/somefile"
- 解释:只有在
/tmp/somefile
文件不存在时,才会创建该文件。
- 解释:只有在
4.3 removes
-
功能:在指定的文件或目录不存在时,跳过命令执行。
-
用法:
ansible all -m command -a "removes=/tmp/somefile rm -f /tmp/somefile"
- 解释:只有在
/tmp/somefile
文件存在时,才会删除它。
- 解释:只有在
五、注意事项
command
模块不支持 shell 特性:由于command
模块不经过 shell 解释器,因此不支持管道(|
)、重定向(>
)、环境变量(如$HOME
)等 shell 特性。如果需要使用这些功能,应使用shell
模块。- 命令安全性:由于
command
模块不使用 shell 解释器,所以它比shell
模块更安全,尤其是在处理不受信任的输入时。 - 模块适用性:
command
模块适用于执行简单、直接的命令。如果需要更复杂的命令或脚本执行逻辑,可以考虑使用shell
模块或编写 Playbook。