微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Puppet:更新文件(或包)时运行shell命令

每当tzinfo包(在Ubuntu Server上)发生变化时,我想运行 mysql_tzinfo_to_sql.我认为Puppet可以解决这个问题.

我认为Puppet会对包版本的更改做出反应,或者如果没有,那么就会改变包中包含的文件的时间戳.

我能看到这样做的唯一方法是拥有一个没有直接操作的资源,并根据它拥有一个exec.

我的问题是:

>是否可以定义文件
那只用于通知一个资源(如exec)?
>有可能吗?
定义包资源,以便激活另一个资源(例如exec)
当包更改或更新?
>有可能吗?
定义运行a的exec资源
shell命令行(例如管道和重定向)而不是
来自文件系统的命令?

总而言之,似乎势不可挡.

关注:很棒的答案!为了完整性(以及记录),我应该注意以下几点:

>感兴趣的完整shell命令是
MysqL_tzinfo_to_sql | MysqL -u root -p密码
(它将tzinfo加载到MySQL数据库中供MySQL使用).
>审计/ etc / tzinfo将是徒劳的,因为这仅仅是
本地时区配置;目标是关注变化
在tzinfo数据本身(因此观看/usr/share / zoneinfo).
>同样,内容将是错误的观察 – 因为它们很可能
不要改变;最好的是观看mtime或者所有这些
每次tzinfo更新后,文件时间都应该更改.

此外,詹姆斯·特恩布尔wrote所有关于审计时的介绍. Metaparameter Reference包含审计参数工作的简短描述.

使用audit属性跟踪文件内容或包版本号,并通过订阅包资源来触发更改.有一些问题,这不适用于–noop,因为state.yaml文件将在–noop模式下更新文件md5 checksum / package版本.我不确定这是否是一个悬而未决的bug,因为我现在无法追踪它.
file { '/etc/tzinfo':
  audit => content,}

exec { '/usr/bin/MysqL_tzinfo_to_sql':
  subscribe => File['/etc/tzinfo'],}

一种更可靠的方法是将文件复制到别处并使用它来触发更新(位置并不重要,我们只是将原始tzinfo作为源跟踪).

file { '/etc/puppet/stage/tzinfo':
  source => '/etc/tzinfo',}

第二种方法当然不适用于包,但是你可以避免使用–noop和state.yaml问题.

关于第三个问题,是的,您可以使用管道和重定向(使用标题并将命令放在命令属性中):

exec { 
  '/bin/echo foo | grep foo > /tmp/foo':
}

原文地址:https://www.jb51.cc/bash/385890.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐