在Linux上配置logrotate
原文地址:http://www.blogkid.net/archives/2349.html
开始用Mongrel部署rails应用时,我参考这篇文章,设置了一下rails的log rotate。当时传入的是”daily”:每天一个日志文件。没想到每天日志切换后,大部分Mongrel进程都会挂掉,只剩下一个可用的。跟踪日志发现,在每天切换日志文件时,只有第一个进程可以成功切换,其它进程因为新的日志文件已经存在,全部挂死。
仔细思考之后我认为,对日志的rotate其实不该放在应用程序里进行。对需要长时间运行的应用来说,只需要向固定的位置输出日志,然后在外部按照需要做截断处理——可以按天、按周甚至按月,如有必要可以进行压缩。这也符合Unix哲学。
我尝试过rotatelogs、cronolog以及logrotate,觉得logrotate更好用。在ubuntu服务器上可以用apt-get安装:
apt-get install logrotate
之后可以打开它的配置文件进行编辑:
vim /etc/logrotate.conf
详细的参数说明可以看它的man page,我的配置如下:
/path_to_app/log/production.log {
daily #按日阶段
missingok
rotate 7 #保留7天
compress #压缩
delaycompress #不压缩前一个(previous)截断的文件(需要与compress一起用)
dateext #增加日期作为后缀,不然会是一串无意义的数字
copytruncate #清空原有文件,而不是创建一个新文件
}
保存之后运行:
/usr/sbin/logrotate /etc/logrotate.conf
新的配置就能生效了。
不光对rails应用的log可以这么做,任何日志拿来给logrotate处理,都一视同仁。


多个实例同时写同一个log file本身就有问题吧