可以使用nginx乘客logrotate rails应用程序而无需重启?

Cha*_*nap 5 ruby-on-rails logrotate passenger

可以在不重启nginx的情况下进行logrotate(只需将USR1信号发送到nginx即可完成工作).我想我的rails应用程序(nginx乘客)是可能的.重新启动我的rails应用程序只是为了进行logrotate是不值得的.

Add*_*ddy 28

logrotate配置非常简单

/path/to/rails_apps/*/shared/log/*.log {
  daily
  missingok
  rotate 30
  compress
  delaycompress
  copytruncate
}
Run Code Online (Sandbox Code Playgroud)

copytruncate基本复制内容到新的文件,并截断旧文件.这消除了重启的需要.


Chi*_*tan 3

如果您正在谈论 Rails 应用程序日志轮换,您可以通过放置

\n\n
 config.logger = Logger.new(config.log_path, 10, 1024**2)\n
Run Code Online (Sandbox Code Playgroud)\n\n

在您的环境文件中。第二个参数是您想要保留的 .log 文件的数量,第三个参数是文件在旋转之前允许达到的大小(以字节为单位)。此配置意味着 10 个 1 MB 的文件。可能不像 logrotate 那样可配置(不支持压缩等),但它可以让您将所有日志文件保存在应用程序中。这通常对我有用。

\n\n

如果想坚持通过 nginx 进行日志轮换,还发现了这一点。

\n

  • 请小心这一点...如果您通过 Passenger 运行多个 Rails 实例(即 PassengerMinInstances),并且您还在 Passenger 配置中设置了类似 PassengerMaxRequests 的内容,那么请注意,Rails 进程的每个新生成都会创建一个新文件。我们的设置如下:“config.logger = Logger.new(config.log_path, 14, 200000000)”,它只保留 1 天的日志,因为 14 个实例会根据负载在一天中上下旋转,每次创建一个新文件。他们几乎没有达到最大大小 200000000。使用 syslog。 (3认同)