(希望我有适合这个问题的 SE 网站,如果没有,请原谅。)
我有一个使用 Apache+mod_rails(passenger)部署的 Ruby-on-Rails 应用程序。它使用 MySQL 作为数据库后端。我使用它SyslogLogger
来将 RoR 日志发送到 syslog,并logrotate
通过每日 cron 作业来轮换日志。
我发现,如果在日志轮换期间 RoR 应用程序处于某个操作的中间,它就会挂起。我尝试过输入copytruncate
配置logrotate
,但似乎这也会影响apache
日志(可能是因为 RoR 错误日志转到了文件error.log
)apache
以及 - 可能 - MySQL 日志(可能 - 有时很难准确地关联哪个日志导致崩溃)。
在互联网上搜索出现了一些关于日志轮换的不同解决方案,一个是使用密钥copytruncate
,另一个是使用cronolog
,但我还没有找到一个可以直接解决我所看到的问题的解决方案。
那么有没有已知的解决方案?在 RoR 应用程序上轮换日志的“正确方法”是什么(使用 apache 和 mod_rails 进行部署)?我应该只copytruncate
输入每一个与应用程序有点相关的logrotate配置文件?
答案1
与‘copytruncate’不同,这些行在我的 rails 应用程序的 logrotate 文件中对我有用:
postrotate
touch /your-rails-directory/tmp/restart.txt
endscript
答案2
我不会费心将您的 Rails 应用程序日志发送到 syslog。当让 Rails 写入自己的日志文件时,您是否尝试过 logrotate 配置?