日志切割:在Linux上配置logrotate 始用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处理,都一视同仁。