Cron 作为厨师配方的一部分执行日志旋转

Cron 作为厨师配方的一部分执行日志旋转,cron,chef-infra,chef-recipe,logrotate,log-rotation,Cron,Chef Infra,Chef Recipe,Logrotate,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 70

我使用以下方法执行
日志旋转

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
但是,在使用chef添加上述条目后,每次都必须在节点上手动运行以下命令:

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

如何在chef recipe中包含上述命令,以便在文件大小达到20M后,可以使用chef recipe执行日志旋转???

我认为您在这里做的一些事情比理想情况要少。让我一个接一个地说:

我使用以下方法执行日志旋转:

bash“为领事添加日志旋转” 代码

这不是创建logrotate条目的好方法。Chef(和其他编排工具)有一个非常好的特性,叫做。它的基本含义是,您可以多次运行同一个配方,并且它只会收敛自身,或者在需要时“应用”自身。这样做的一个问题是,每次运行cookbook时,您的代码块都会运行—因此在运行5次之后,/etc/logrotate.conf中将有5个相同的条目。那不是很好

谢天谢地,有很多更好的方法来做你想做的事情。你熟悉这本书吗?这是一个网站,你可以找到许多预先制作的食谱来扩展你的食谱的功能。因此,对于您当前的问题,您可以使用名为的食谱。你如何在自己的食谱中使用它?您需要通过将以下内容添加到这些文件中来包含它:

伯克斯菲尔

source 'https://supermarket.chef.io'
metadata
元数据.RB

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

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/lograte.conf中创建条目。这是添加logrotate条目的首选方法)

继续下一部分

如何在chef recipe中包含上述命令,以便 文件大小调整后,可以使用chef recipe执行旋转 达到2000万

Logrotate作为程序自动运行,每天一次。运行时,它将检查/etc/logrotate.conf和/etc/logrotate.d/*中的所有条目,如果它们满足要求(在本例中,大小为20M),则运行它们。然而,由于它每天只运行一次,这取决于您的日志增长速度,因此在对其进行评估和旋转时,它可能会远远大于20M

现在,你有两个选择。或者,第一,让logrotate按预期的方式工作,如果日志的大小超过20M,则每天旋转一次日志。或者,您可以做您想做的事情,并在厨师食谱中运行该命令,尽管这不是一个好方法。但是,为了完整起见,我将告诉您如何使用Chef运行命令。但是记住!这也不是幂等的。因此,为什么这不是一个好的方式做这件事

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

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

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

我认为有一些事情你做得不理想。让我一个接一个地说:

我使用以下方法执行日志旋转:

bash“为领事添加日志旋转” 代码

这不是创建logrotate条目的好方法。Chef(和其他编排工具)有一个非常好的特性,叫做。它的基本含义是,您可以多次运行同一个配方,并且它只会收敛自身,或者在需要时“应用”自身。这样做的一个问题是,每次运行cookbook时,您的代码块都会运行—因此在运行5次之后,/etc/logrotate.conf中将有5个相同的条目。那不是很好

谢天谢地,有很多更好的方法来做你想做的事情。你熟悉这本书吗?这是一个网站,你可以找到许多预先制作的食谱来扩展你的食谱的功能。因此,对于您当前的问题,您可以使用名为的食谱。你如何在自己的食谱中使用它?您需要通过将以下内容添加到这些文件中来包含它:

伯克斯菲尔

source 'https://supermarket.chef.io'
metadata
元数据.RB

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

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/lograte.conf中创建条目。这是添加logrotate条目的首选方法)

继续下一部分

如何在chef recipe中包含上述命令,以便 文件大小调整后,可以使用chef recipe执行旋转 达到2000万

Logrotate作为程序自动运行,每天一次。运行时,它将检查/etc/logrotate.conf和/etc/logrotate.d/*中的所有条目,如果它们满足要求(在本例中,大小为20M),则运行它们。然而,由于它每天只运行一次,这取决于您的日志增长速度,因此在对其进行评估和旋转时,它可能会远远大于20M

现在,你有两个选择。或者,第一,让logrotate按预期的方式工作,如果日志的大小超过20M,则每天旋转一次日志。或者,您可以做您想做的事情,并在厨师食谱中运行该命令,尽管这不是一个好方法。但是,为了完整起见,我将告诉您如何使用Chef运行命令。但是记住!这也不是幂等的。因此,为什么这不是一个好的方式做这件事

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

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

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

也许值得从中添加
cron\u d