命令模块:
- command
- script
- shell
一 、command
注意:使用command模块在远程主机中执行命令时,不会经过远程主机的shell处理,在使用command模块时,如果需要执行的命令中含有重定向、管道符等操作时,这些符号也会失效,比如<, >, |, ; 和 &
这些符号,如果你需要这些功能,可以参考后面介绍的shell模块,还有一点需要注意,如果远程节点是windows操作系统,则需要使用win_command
模块。
- free_form参数 :必须参数,指定需要远程执行的命令,需要说明一点,free_form参数与其他参数并不相同,free_form并不是一个”实际存在”的参数名,比如,当我们想要在远程主机上执行ls命令时,我们并不需要写成free_form=ls ,这样写反而是错误的,因为并没有任何参数的名字是free_form,当我们想要在远程主机中执行ls命令时,直接写成ls即可,这就是free_form参数的含义,因为command模块的作用是执行命令,所以,任何一个可以在远程主机上执行的命令都可以被称为free_form。
- chdir参数 : 此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。
- creates参数 :它的作用是当指定的文件存在时,就不执行对应命令,比如,如果/testdir/test文件存在,就不执行我们指定的命令;
- removes参数 :与creates参数的作用正好相反,它的作用是当指定的文件不存在时,就不执行对应命令。
1、command命令示例
2、command命令示例 不加参数-m
如果不添加-m参数,默认使用command模块:
3、command命令示例 chdir
4、command命令示例 creates
对应路径下并不存在指定文件,所以执行该指定的命令
5、command命令示例 removes
在指定主机的指定路径下创建相应的文件,再次执行该参数的命令:
二、shell
command模块是Ansible的默认模块,使用比较简单,但是command模块的命令执行不是通过shell执行的,这就导致了带有">","<","&“和”|"
等特殊符号不能使用。因此,我们不能使用command模块进行输入输出重定向,也不能使用command模块一次性的执行多个命令。
shell模块可以帮助我们在远程主机上执行命令,与command模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的/bin/sh程序处理。
- free_form参数 :同上
- chdir参数 : 同上
- creates参数 :同上
- removes参数 :同上
- executable参数:默认情况下,shell模块会调用远程主机中的/bin/sh去执行对应的命令,通常情况下,远程主机中的默认shell都是bash,如果你想要使用其他类型的shell执行命令,则可以使用此参数指定某种类型的shell去执行对应的命令,指定shell文件时,需要使用绝对路径。
shell模块中chdir、creates、removes参数的作用与command模块中的作用都是相同的。仅作如下举例:
1、command命令示例 带特殊字符
遇到上述情况,可通过shell模块进行实现:
2、shell命令示例 带特殊字符
1、执行命令
2、查看重定向的目标文件
3、shell命令示例 指定shell类型
三、script
执行的命令过多,shell模块在使用上还是不方便。这时,我们直观的考虑是将我们想要执行的命令写成脚本,然后想办法将该脚本复制到客户端上去,然后控制客户端执行。但是,其实Ansible自带有script模块,可以帮助我们实现上述过程。
下面,我们尝试使用Ansible的script模块。在/root目录下,创建一个test.sh的脚本文件,在脚本文件中写入如下内容:
相应的参数同上