执行日志旋转作为厨师食谱的一部分

用餐时间

我正在使用以下配方执行log rotation

bash 'adding_logrotate_for_consul' do
  code <<-EOH
    echo "" >> /etc/logrotate.conf
    echo "/tmp/output.log {" >> /etc/logrotate.conf
    echo -e "\tsize 20M" >> /etc/logrotate.conf
    echo -e "\tcreate 700 root root" >> /etc/logrotate.conf
    echo -e "\trotate 3" >> /etc/logrotate.conf
    echo "}" >> /etc/logrotate.conf
  EOH
end

上面的代码运行完全正常,并在其中添加了以下条目 /etc/logrotate.conf

/tmp/output.log {
        size 20M
        create 700 root root
        rotate 3
}

但是,使用chef添加上述条目后,我必须每次都在节点上手动运行以下命令:

logrotate -s /var/log/logstatus /etc/logrotate.conf

如何在厨师配方中包含上述命令,以便在文件大小达到20M之后可以使用厨师配方执行日志轮换?

尤金·罗梅洛(EugeneRomero)

我认为您在这里做的事情有些不理想。让我一个接一个地走:

我正在使用以下配方执行日志轮换:

bash'adding_logrotate_for_consul'做代码...

这不是创建logrotate条目的好方法。Chef(和其他编排工具)具有一个非常漂亮的功能,称为幂等它的基本含义是您可以多次运行相同的配方,并且只有在需要时才会收敛或“应用”自身。执行此操作时遇到的问题是,每次运行食谱时,代码块都会运行-因此,运行5次后,/ etc / logrotate.conf中将有5个相同的条目。那不是很好...

幸运的是,有很多更好的方法可以做您想做的事情。您对厨师超市熟悉吗?在此站点上,您可以找到许多预制的菜谱,以扩展菜谱的功能。因此,对于您当前的问题,您可以使用例如名为logrotate的食谱您如何在自己的食谱中使用它?您需要通过将以下内容添加到这些文件中来包括它:

档案文件

source 'https://supermarket.chef.io'
metadata

元数据

depends 'logrotate'

现在,您的食谱已经知道“ logrotate”食谱,您可以使用它提供的Chef资源。因此,您可以创建以下配方:

logrotate_app 'app_with_logs' do
  path      '/tmp/output.log'
  options   ['size 20M']
  rotate    3
  create    '700 root adm'
end

现在,当您运行配方时,仅当尚不存在logrotate条目时,此操作才会创建便利!(请注意,这可能会在/etc/logrotate.d/中创建条目,而不是在/etc/logratate.conf中创建。这是添加logrotate条目的首选方式)。

继续下一部分。

如何在厨师配方中包含上述命令,以便在文件大小达到20M之后可以使用厨师配方执行日志轮换?

Logrotate作为程序每天自动运行一次。运行时,它将检查/etc/logrotate.conf和/etc/logrotate.d/*中的所有条目,并在满足要求的情况下运行它们(在这种情况下,大小为20M)。但是,由于它每天仅运行一次,具体取决于日志的增长速度,因此到评估和轮换之时,它可能比20M大得多!

所以现在,您有两个选择。或者,让logrotate像预期的那样工作,如果它的大小超过20M,则每天旋转一次日志。一到两个,您可以做您想做的事,然后在Chef配方中运行该命令,尽管这不是一个好的方法。但是,为了完整起见,我将告诉您如何使用Chef运行命令。但要记住!同样,这将不是幂等的。因此,为什么它不是这样做的好方法!

要从Chef配方运行命令,请使用execute资源。例如:

execute 'rotate_my_log_because_I_cant_wait_24h' do
  command 'logrotate -s /var/log/logstatus /etc/logrotate.conf'
end

那将在您的节点上运行该命令。但同样,这不是推荐的方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

旋转画布的一部分

围绕枢轴旋转纹理的一部分

grep仅重复日志的一部分

从日志中提取线的一部分

作为项目的一部分安装时执行PHPUnit

使用Edm.DateTime作为主键的一部分执行OData方法

如何在 mysql 中执行 IF 语句作为 SELECT 语句的一部分

选择单元格作为要执行的代码的一部分

Scala错误处理-如果我的Scala代码的一部分失败,我想将function()作为程序的一部分执行

一个节点可以成为多个厨师环境的一部分吗

Promise 作为 redux 状态的一部分

使用变量作为语句的一部分

块作为块的一部分

if 条件作为 GIT 命令的一部分

UiSegmentedControl作为UILabel子类的一部分

将标题作为CURL的一部分

作为更新查询的一部分,执行UNNEST,INNER JOIN,然后执行ARRAY_AGG

如何执行Jenkins构建作业,作为另一个作业构建的一部分

循环结果集并作为存储过程的一部分执行插入语句

使用SSIS变量(@ [User :: FileName])作为“执行Sql Server任务”中UPDATE的一部分?

作为Visual Studio Team Services构建任务的一部分,如何在PowerShell脚本中执行SQL?

如何在VSTS 2015中作为发布管理的一部分执行/运行编码的UI测试?

我可以使用字符串作为可执行代码行的一部分吗?

以给定角度在y轴上旋转单个UIView的一部分

当我在ImageView中旋转图像时,图像的一部分消失了

如何在javascript中仅旋转画布的一部分?

如何使用CSS在自身上旋转SVG的一部分?

如何在Paw中将文件作为多部分请求的一部分上载?

为什么这部分代码要先于另一部分执行?