请在Chrome、Firefox、IE8+等现代浏览器浏览本站。 本博客所有文章为原创,图片不加水印,随意转载,但请注明来源,谢谢!

Logrotate 在Docker下的配置自动切割Lighttpd的log

后端 kxjhwbb 605℃ 0评论

原来不知道有这样的东西,一直以为是Lighttpd、Nginx自带的切割。

项目上了docker之后发现Lighttpd和Nginx都不再切割了,但明明docker里的版本都比外面的新

今天重新google了一顿,发现原来是Centos自带的Logrotate在做这个操作,在docker里没了这玩意。同时也导致了硬盘空间占满的隐患。

中途遇到的2个问题:Crontab、以及服务端对文件的重新写入(logrotate改了文件名加上时间后缀后,不对服务端进行操作,Lighttpd Nginx都是继续往改了名之后的文件里输出log)

安装

我这里使用的alpine

apk add logrotate

配置Lighttpd

配置文件:/etc/logrotate.d/lighttpd

启动crond

crond指令即可启动。logrotate已经把自己的任务文件放在了/etc/periodic/daily/logrotate

只要crontab有运行,每天就会跑一次。

测试切割

注意,你手动logrotate /etc/logrotate.conf,执行之后并不会就切割了log文件。

logrotate的工作原理大概是:每次切割操作、或首次切割,会记录所有log文件的时间点在 /var/lib/logrotate.status。下一次执行的时候,如果判断时间减去记录的时间已经超过一定时长(默认7天weekly),那么就会执行切割。

所以如果你想马上切割,需要自己修改logrotate.status文件,把时间改为7天以前的,再执行,就会发现logrotate做了切割操作啦。

Lighttpd的postrotate

自动生成的,似乎在docker下并不能用,我在centos里找到了能用的

/usr/bin/killall -HUP lighttpd &>/dev/null || :

这个指令的作用,大致可以理解为重新创建log文件进行写入,这样logrotate之后,lighttpd才会写入的新的文件里。

这个是logrotate自带的lighttpd配置文件

附上一些配置说明

crond如何自动运行

请看下一篇:Docker+Alpine下简单的运行多个进程。

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址