Rails 记录器即使在删除日志文件后也不会释放日志文件;它一直在磁盘上占用 space
Rails logger does not release log file even after deleting log file; it keeps taking space on disk
我有一个多线程 rails 应用程序,它有很多工作人员,它们从 resque 队列中提取消息并记录消息。我已经把 linux logrotate 旋转日志,然后上传到 S3。
上传和删除文件后,看到磁盘space还在使用,没有释放。当我执行下面的命令时,我看到很多文件。
lsof | grep deleted
ruby 14530 fadmin 7w REG 202,1 1972144092 407325 /home/log/production_database.log.1 (deleted)
ruby-time 14536 20352 fadmin 7w REG 202,1 1972144092 407325 /home/log/production_database.log.1 (deleted)
每次都填满磁盘space。只有当我杀死所有 Ruby 个进程时,它才会释放 space。
我能知道轮换日志的最佳方法是什么吗?我应该如何避免这个问题?
这里有一个解决方案http://www.akitaonrails.com/2013/06/28/if-rotacao-de-logs-em-apps-rails#.UdTZ4T7wKeI,它使用记录器配置来轮换文件,例如:
config.logger = Logger.new(Rails.root.join("log",Rails.env + ".log"), 5, 100*1024*1024)
终于在下面的选项中使用 logrotate .. 而无需终止或重新启动 ruby 进程
/home/log/*.log {
maxsize 1M
missingok
rotate 20
notifempty
nocreate
copytruncate
su root root
}
解决我问题的主要参数是
copytruncate – 复制日志文件然后清空它。这可以确保 Rails 正在写入的日志文件始终存在,这样您就不会遇到问题,因为文件实际上并没有改变。如果不使用它,则每次都需要重新启动 Rails 应用程序。
我有一个多线程 rails 应用程序,它有很多工作人员,它们从 resque 队列中提取消息并记录消息。我已经把 linux logrotate 旋转日志,然后上传到 S3。
上传和删除文件后,看到磁盘space还在使用,没有释放。当我执行下面的命令时,我看到很多文件。
lsof | grep deleted
ruby 14530 fadmin 7w REG 202,1 1972144092 407325 /home/log/production_database.log.1 (deleted)
ruby-time 14536 20352 fadmin 7w REG 202,1 1972144092 407325 /home/log/production_database.log.1 (deleted)
每次都填满磁盘space。只有当我杀死所有 Ruby 个进程时,它才会释放 space。
我能知道轮换日志的最佳方法是什么吗?我应该如何避免这个问题?
这里有一个解决方案http://www.akitaonrails.com/2013/06/28/if-rotacao-de-logs-em-apps-rails#.UdTZ4T7wKeI,它使用记录器配置来轮换文件,例如:
config.logger = Logger.new(Rails.root.join("log",Rails.env + ".log"), 5, 100*1024*1024)
终于在下面的选项中使用 logrotate .. 而无需终止或重新启动 ruby 进程
/home/log/*.log {
maxsize 1M
missingok
rotate 20
notifempty
nocreate
copytruncate
su root root
}
解决我问题的主要参数是
copytruncate – 复制日志文件然后清空它。这可以确保 Rails 正在写入的日志文件始终存在,这样您就不会遇到问题,因为文件实际上并没有改变。如果不使用它,则每次都需要重新启动 Rails 应用程序。