我正在使用以下配方执行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之后可以使用厨师配方执行日志轮换?
我认为您在这里做的事情有些不理想。让我一个接一个地走:
我正在使用以下配方执行日志轮换:
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] 删除。
我来说两句