加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-15 18:38:59 所属栏目:安全 来源:网络整理
导读:每当tzinfo包(在Ubuntu Server上)发生变化时,我想运行 mysql_tzinfo_to_sql.我认为Puppet可以解决这个问题. 我认为Puppet会对包版本的更改做出反应,或者如果没有,那么就会改变包中包含的文件的时间戳. 我能看到这样做的唯一方法是拥有一个没有直接操作的资源
每当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':
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读