puppet之exec管理

简介:

本文系统centos6.0 puppet:2.6.18

exec参数介绍
command : 指定要执行的命令。如果忽略,这个参数的值默认为资源的标题。必须填写命令的完整路径或者提供这个命令的查找路径。假如命令执行成功,执行过程的输出将会记录到普通 (normal)日志中,但是如果命令执行失败,任何的输出都会记录到错误日志中。
creates : 命令创建的一个文件。加入这个参数设置的话,只有这个文件不存在的时候命令才会执行,比如下面的例子;

1
2
3
4
5
6
7
exec { "/var/lib/puppet/report" :
  path => [ "/bin" , "/usr/bin" ],
  cwd =>  "/var/lib/puppet" ,
  command =>  "mkdir -p /var/lib/puppet/report" ,
  creates =>  "/var/lib/puppet/report" ,
  group =>  'zhangsan' ,
  }

上例中,只有/var/lib/puppet/report文件不存在的时候,command 中的命令才会执行,也就是生成report文件,某种意义上creates表明的结果
cwd : 命令执行的路径。假如目录不存在,命令执行将会失败。
environment : 为命令设置附加的环境变量。加入你用这个参数设置PATH,那么将会把path参数的值覆盖。多个环境变量需要使用数组指定。
user : 定义运行命令的用户。 注意如果你使用了这个参数,那么任何的错误输出不会在当下被捕捉,这是Ruby的一个bug。
group : 执行命令运行的用户组。这个看起来在各个平台运行结果不确定,这是平台的问题不是ruby或者puppet的问题。
logoutput : 是否记录输出信息。默认会根据exec资源的日志等级来记录输出信息,使用on_failure只有当命令执行出错的时候才会记录输出信息。值可以为true、fales、on_failure和任何合法的日志等级。
onlyif : 只有onlyif指定命令执行返回为0的时候,命令才会执行

1
2
3
4
5
6
7
8
exec { "/var/lib/puppet/report" :
   path => [ "/bin" , "/usr/bin" ],
   cwd =>  "/var/lib/puppet" ,
   command =>  "mkdir -p /var/lib/puppet/report" ,
   group =>  'zhangsan' ,
   onlyif =>  "test -f /var/lib/puppet/test.file" ,
   logoutput =>  true
   }


上面表明当test.file存在的时候才执行command命令
path : 命令执行搜索的路径。如果没有指定path,命令需要填写完整的路径。路径可以指定为一个数组并通过冒号分隔。
如:

1
path => [ "/bin" , "/usr/bin" ],

refresh : 定义如何更新命令。当exec收到一个来自其他资源的事件时,默认只会重新执行一次命令。不过这个参数允许你定义更新时执行不同的命令。
refreshonly : 该属性可以使命令变成仅刷新触发的,也就是说只有在一个依赖的对象被改变时,命令才会被执行。仅当命令与其他对象有依赖关系时,这个参数才有意义。当你要触发某个行为时,会显得很有用:
要注意的是只有subscribe和notify可以促发行为,而不是require,所以在使用refreshonly时,只有同时使用subscribe或notify才有意义。有效的值为true, false。
returns : 指定返回的代码。如果被执行的命令返回了其他的代码,一个错误(error)会被返回。默认值是0,可以定义为一个由可以接受的返回代码组成的数组或单值
timeout : 命令运行的最长时间。如果命令运行的时间超过了timeout定义的时间,那么这个命令就会被终止,并作为运行失败处理。当定义为负值时就会取消运行时间的限制。timeout的值是以秒为单位的。
unless : 如果这个变量被指定了,那么exec会先执行,除非unless所设定的命令返回0。例如:

1
2
3
4
exec {  "/bin/echo root >> /usr/lib/cron/cron.allow" :
   path =>  "/usr/bin:/usr/sbin:/bin" ,
   unless =>  "grep root /usr/lib/cron/cron.allow 2>/dev/null"
       }

上面这段代码先用grep在cron.allow文件(Solaris系统中)中找root,如果没有找到,就写入root。
要注意的是这个参数里的命令跟主命令遵循同样的规则,也就是说如果path没有被设置的话,需要使用绝对路径。
案例1、让/var/www/html/index.html文件修改时就自重启httpd服务

1
2
3
4
5
6
7
8
9
10
11
[root@master ~]# vim /etc/puppet/manifests/exec2.pp
file {  "/var/www/html/index.html" :
     content => template( "/etc/puppet/manifests/index.html" ),
     }
exec {  "httpdserver" :
     path => [ "/sbin" ],
     command =>  "service httpd restart" ,
     subscribe => File[ "/var/www/html/index.html" ],
     refreshonly =>  true ,
     logoutput =>  "on_failure" ,
     }

234941709.jpg



本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1318782

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
测试技术 应用服务中间件 nginx
|
应用服务中间件 nginx 运维
|
算法 Shell 测试技术