分类: LINUX
2012-01-11 16:49:00
puppet exec用法:
1、当条件不满足时则执行某命令:
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没有被设置的话,需要使用绝对路径。
2、当条件满足时才执行某命令:
exec { "logrotate": path => "/usr/bin:/usr/sbin:/bin", onlyif => "test `du /var/log/messages | cut -f1` -gt 100000" }只有在test返回true的时候logrotate才会被运行。
需要注意的是onlyif定义的命令跟主命令遵循同样的规则,也就是说如果path没有被设置的话,需要使用绝对路径。
除此之外,onlyif还可以接受数组做为其值,例如:
onlyif => ["test -f /tmp/file1", "test -f /tmp/file2"]
上面的代码限定了只有在所有数组中的条件返回true时exec才会被执行。
3、当文件有修改时执行某命令:
### sysctl.conf file { "/etc/sysctl.conf": source => "puppet://$puppetserver/files/etc/sysctl.conf", owner => "root", group => "root", mode => 0644, } # Rebuild the database, but only when the file changes # 当sysctl.conf有更的时候才执行sysctl -p exec { "sysctl refresh kernel config": path => ["/usr/bin", "/usr/sbin", "/bin", "/sbin"], command => "sysctl -p", subscribe => File["/etc/sysctl.conf"], refreshonly => true }当/etc/sysctl.conf有更新时,就执行:sysctl -p
4、其他
creates
指定命令所生成的文件。如果提供了这个参数,那么命令只会在所指定的文件不存在的情况的被执行:
cwd
指定命令执行的目录。如果目录不存在,则命令执行失败。
更多参考: