被遗忘的Logrotate

我发现很多人的服务器上都运行着一些诸如每天切分Nginx日志之类的CRON脚本,大家似乎遗忘了Logrotate,争相发明自己的轮子,这真是让人沮丧啊!就好比明明身边躺着现成的性感美女,大家却忙着自娱自乐,罪过!

Logrotate的介绍

显而易见,Logrotate是基于CRON来运行的,其脚本是「/etc/cron.daily/logrotate」:

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

实际运行时,Logrotate会调用配置文件「/etc/logrotate.conf」:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    minsize 1M
    create 0664 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

这里的设置可以理解为Logrotate的缺省值,当然了,可以我们在「/etc/logrotate.d」目录里放置自己的配置文件,用来覆盖Logrotate的缺省值。

Logrotate的演示

按天保存一周的Nginx日志压缩文件,配置文件为「/etc/logrotate.d/nginx」:

/usr/local/nginx/logs/*.log {
    daily
    dateext
    compress
    rotate 7
    sharedscripts
    postrotate
        kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

如果你等不及CRON,可以通过如下命令来手动执行:

shell> logrotate -f /etc/logrotate.d/nginx

当然,正式执行前最好通过Debug选项来验证一下,这对调试也很重要:

shell> logrotate -d -f /etc/logrotate.d/nginx

BTW:类似的还有Verbose选项,这里就不多说了。

Logrotate的疑问

问题:sharedscripts的作用是什么?

大家可能注意到了,我在前面Nginx的例子里声明日志文件的时候用了星号通配符,也就是说这里可能涉及多个日志文件,比如:access.log和error.log。说到这里大家或许就明白了,sharedscripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。

问题:rotate和maxage的区别是什么?

它们都是用来控制保存多少日志文件的,区别在于rotate是以个数为单位的,而maxage是以天数为单位的。如果我们是以按天来轮转日志,那么二者的差别就不大了。

问题:为什么生成日志的时间是凌晨四五点?

前面我们说过,Logrotate是基于CRON运行的,所以这个时间是由CRON控制的,具体可以查询CRON的配置文件「/etc/crontab」,可以手动改成如23:59等时间执行:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
59 23 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

如果使用的是新版CentOS,那么配置文件为:/etc/anacrontab。

问题:如何告诉应用程序重新打开日志文件?

以Nginx为例,是通过postrotate指令发送USR1信号来通知Nginx重新打开日志文件的。但是其他的应用程序不一定遵循这样的约定,比如说MySQL是通过flush-logs来重新打开日志文件的。更有甚者,有些应用程序就压根没有提供类似的方法,此时如果想重新打开日志文件,就必须重启服务,但为了高可用性,这往往不能接受。还好Logrotate提供了一个名为copytruncate的指令,此方法采用的是先拷贝再清空的方式,整个过程中日志文件的操作句柄没有发生改变,所以不需要通知应用程序重新打开日志文件,但是需要注意的是,在拷贝和清空之间有一个时间差,所以可能会丢失部分日志数据。

BTW:MySQL本身在support-files目录已经包含了一个名为mysql-log-rotate的脚本,不过它比较简单,更详细的日志轮转详见「Rotating MySQL Slow Logs Safely」。

熟悉Apache的朋友可能会记得cronolog,不过Nginx并不支持它,有人通过mkfifo命令曲线救国,先给日志文件创建管道,再搭配cronolog轮转,虽然理论上没有问题,但效率上有折扣。另外,Debian/Ubuntu下有一个简化版工具savelog,有兴趣可以看看。

时间: 2024-12-31 08:58:08

被遗忘的Logrotate的相关文章

记录是为了遗忘——印象笔记伴你成长

1 大脑擅长思考而不是记忆 我们的大脑并不擅长记忆,但是我们总觉得我们的大脑应该担当起这个责任.如果你忘记了什么事儿,第一个想法就是:"瞧我这脑子,什么都记不住."忘记事情的时候,甚至会怀疑自己是不是身体出现了问题,才会导致记忆力下降. 仔细想想,我们的大脑到底是用来做什么的?难道真的是为记忆而生的吗?牛顿在树下,看到苹果掉下来,结果一个伟大的物理发现就这样诞生了.伟大的科学家,却也有可能早晨出门的时候忘记带钥匙.大脑是智慧的象征,即使你不是科学家,你也会用你的聪明智慧,在某个领域创造

被遗忘的javascript的slice() 方法

  javascript数组对象的slice方法从数组中分离出一个子数组,功能类似于字符串对象的substring方法.今天我们就来详细探讨下javascript的这个不太常用的slice()方法. slice() 方法可从已有的数组中返回选定的元素. 好吧,我承认我竟然把它忘了! 这次我在回顾一下它 语法 arrayObject.slice(start,end) 数组.slice(起始,结束) ? 1 2 3 4 5 6 7 8 9 10 <script type="text/javas

被遗忘的HTML元素

众所周知,制作网页所用到的最基本的语言HTML主要是由著名的W3C组织来制定标准的.但由于IE和NetScape之间都在为击败对手不断地研究新的网页技术而竞争,就产生了不少新的HTML元素.这些新的HTML元素,有的被W3C组织所认证,发展成为所有的浏览器必须支持的HTML标准元素.但有的却仍不被别的浏览器所接受.特别是对于目前最主流的浏览器-IE和NetScape,出于各种方面的原因,总是有一些元素不能得到二者共同的支持.在实际的网页制作过程中,为了能使页面在所有的浏览器中都能正常显示,这样的

被人遗忘的利器:巧妙使用百度分享让网站受益匪浅

我们要做网站优化就要关注.依赖百度,因此无论百度算法还是百度产品的推出都会成为我们关注的焦点.一些百度产品还能被我们巧妙利用并成为我们的优化利器,如常见的百度知道.百度经验等等,这些工具都能为我们提供一个优质的外链平台,使我们优化网站更加轻松.然而,很多人却遗忘了一个利器:百度分享. 相对于文库.经验等产品,百度分享的知名程度的确相对较低,但并不代表其一无是处,相反百度分享有着强大的作用,现在不少网站也安装了百度分享,如下图: 百度分享的作用真的是那么明显吗?到底怎么运用才能让网站优化如虎添翼?

SEO中哪些被遗忘的重点

SEO是网络营销最为重要的方法之一,合理的利用SEO能够短暂而快速的提高网站整体关键词排名,从而获得价值不菲的流量,通过网站创造实质的价值.随着SEO的广泛应用,越来越多的被人们所熟知,营销者的思维也在逐渐发生变化,在很多情况下造成思维扭曲,忽略了SEO的初意:为了用户体验而做SEO,然而,很多情况下是过于注重SEO,从而忽视了用户体验.尤其是在网站设计中很容易被人们所忽略其重要性,很多用户体验并没有真正满足.SEO中哪些被遗忘的用户体验有哪些呢?在这里笔者经过思维整理也谈谈个人的观点,希望能与

被遗忘的“活化石”:BBS没落中求生

BBS,消失的江湖? 恐龙跟不上蜜蜂的脚步 如果让媒体和行业人士评价2012年比较失意的IT企业,估计很少有人会想起天涯.猫扑这样的网站--不是它们活得很好,而是在微博和微信夺人眼球的今天,传统的BBS社区真的快成为"被人遗忘的角落". 也正是这样的"用脚投票",让BBS社区们开始感觉到了一种清汤寡水的孤寂.热闹是微博和微信的,尽管曹国伟在今年已经开始亲自动手要提高微博的变现能力,但是至少微博还有着超过4亿的注册用户,而被微博打压下的BBS社区们,根本不敢指望还能拥

那些遗忘在角落的SEO技巧:关键词研究篇

大家好,我们在做SEO的时候,重点就是关键词研究,对于这一点,相信很多朋友的已经做的很好了,但是有不少的朋友因为关键词表现不错之后就对其中的一些SEO技巧进行了选择性的忽略,或者因为技巧太多,我们能够在一段时间内运用的或者说自己擅长的也就那么几个,而很多我们知晓却又被遗忘在角落的SEO技巧就是我今天要跟大家谈到的一个知识点. 首先,我们来回顾一下关键词研究的过程中我们要考虑的方向有三个: 1.关键词拓展和选取: 热门关键词(行业词或专业名词类,如SEO) 长尾关键词(地区,品牌,规格,型号,厂家

不要让蜘蛛遗忘你的网站

站长,别让蜘蛛遗忘了您的网站?如果你让蜘蛛遗忘了你网站,那么下一个遗忘你网站的人就是广大网民,一但网民遗忘你的网站,那站长您下岗的历史时刻也就来到了,你也就到退出互联网的历史舞台的时候了.因此,如果站长还想与时俱进,可千万别让蜘蛛遗忘了您的网站,同时也别忘接着往下读,这样才会了解怎样不让蜘蛛遗忘了您的网站. 一,向蜘蛛发送邀请贴,邀请蜘蛛上你的网站做客. 如今的蜘蛛已经是一个大腕,你不向它发邀请涵,它是不会来你的网站.因此你必须向它发送邀请涵.那要怎样向它发贴了,贴上要写些什么内容呢?其实蛮容易

浅谈容易被站长遗忘的优化细节

  细节决定成败,这句话用到网站优化上面同样凑效.seo本来就是针线活:需要我们稳定的更新文章.坚持发外链和做内链.天天统计数据.定期的分析调整数据等,然而久而久之,很多站长把这些细节问题抛于脑后,天天只是更新文章,发发外链,天天打着内容为王,外链为皇的旗号大肆进行项目复制,结构网站被降权或拔毛了却不知道问题出在哪里,今天笔者就过来人的身份为大家简单阐述一些容易被站长遗忘的优化细节. 站内链接优化细节 站内链接是实现站内权重平衡与站内结构清晰的重要元素,笔者强调以下站内链接优化要点: 1.站内的