puppet版本:3.0.2
puppet服务端:192.168.56.101 puppet.server.cihi.cn
puppet客户端:192.168.56.103 node1.server.cihi.cn
一、exec资源介绍
1、功能:实现在客户端执行系统命令
2、支持参数:
command #执行命令内容,如果不使用命令的绝对路径,需要指定path参数
path #指定path变量
provider #指定运行环境,如shell,可以执行shell自带的命令
cwd #指定在哪个目录运行命令,如果此目录不存在则运行失败
creates #指定一个文件作为命令执行的条件,只有当指定的文件不存在时才会执行命令
environment #设置环境变量,如在这里设置path变量会覆盖path参数指定的
logoutput #设置日志输出级别,默认为on_failure在命令执行返回结果不为0时才输出,有效值true|false|on_failure
onlyif #指定一个条件作为命令执行的条件,只有当该条件返回为0时才会执行命令
refreshonly #如果该参数为true时,只有subscribe和notify才可以触发执行定义的命令,require不可以触发
timeout #指定命令的最大执行时间,单位为秒,默认为300秒,可以设置为0禁用超时
tries #当命令执行失败时,重新尝试的次数,默认为1次,timeout指定的时间适用于每次的尝试,而不是总时长
try_sleep #每两次tries时间间隔
unless #与onlyif功能类似,但条件相反,只要指定命令返回不是0,就执行命令
user #指定命令以哪个用户的身份来运行
二、exec资源示例
1、使用puppet在客户端/root创建b.txt文件
在客户端执行puppet测试
2、不加控制条件的exec资源将会在客户端每次执行该资源时,执行该命令,所以exec资源定义时一般情况下都需要添加控制条件,来限制命令的执行
在客户端测试
修改exec资源定义设置大于400就执行
在客户端测试
三、exec资源总结
使用exec资源可以随心所欲的在客户端执行一些命令,触发执行脚本等,编译安装的软件包可以通过file资源和exec资源结合实现自动化部署,同样exec资源也有几个需要注意的地方:
1、未添加控制参数的exec资源将变得非常危险,因为它会在客户端每次从服务端更新资源时被执行。
2、并不是所有的命令都可以使用exec资源来定义,需要的交互的命令一般都不能执行成功,例如vi、top等,所以在使用exec来执行脚本时,脚本中也不能出现交互的操作。
3、当你为exec资源定义了refreshonly => true 参数时,该资源定义的命令将永远不会被执行,除非定义的subscribe参数指定的资源发生了更新,或者其他资源定义的notify参数指向了本资源并发生了更新时,才会执行。
说明:以上都是个人对puppet的使用总结,不能确保所有的参数使用和说明是准确无误的,仅供互相学习交流。