【问题标题】:Delete all file in directory older than x days using Chef使用 Chef 删除目录中超过 x 天的所有文件
【发布时间】:2021-01-13 23:14:17
【问题描述】:

我尝试使用以下命令删除日志文件:

log 'remove compressed log files'
::Dir['/var/log/*.gz'].each { |f| ::FileUtils.rm_rf(f) }

我的要求是根据 mtime 删除它们。

【问题讨论】:

  • File::Stat 有这方面的方法。
  • 运行代码时发生了什么?我没有看到任何问题,所以你在问我们什么?
  • 这可能不是您问题的答案,但可能是您的问题的答案:您知道logrotate,不是吗?

标签: ruby chef-infra


【解决方案1】:

这只是简单的 Ruby 代码,而不是 Chef 配方 DSL。一种更类似于厨师的方式是

Dir['/var/log/*.gz'].each do |path|
  file path do
    action :delete
    only_if { ::File.stat(path).ctime < (Time.now - 60*60*24*7) }
  end
end

【讨论】:

  • 感谢它确实有效。顺便说一句,我看到已删除的文件转储到 /var/chef/backup/home/y/logs/。这是厨师的方式吗?我们可以告诉厨师永久删除吗?
  • backup false 添加到资源以禁用该行为。另外值得注意的是 Dir glob 将在配方编译时扩展。在这种情况下这并不重要,但对于这种风格的其他东西,它不会拾取其他 Chef 食谱添加的文件,因为 glob 发生“早期”。
猜你喜欢
  • 1970-01-01
  • 2014-06-03
  • 2015-04-01
  • 1970-01-01
  • 2022-07-06
  • 1970-01-01
  • 2017-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多