【问题标题】:Rotated log files owned by root user, not apps user由 root 用户而非应用程序用户拥有的轮换日志文件
【发布时间】:2018-06-28 13:23:01
【问题描述】:

我在 Rails 应用程序中使用日志轮换,这似乎可以正常工作。但是,新的日志文件归root 用户而不是apps 用户所有。该应用程序正在通过使用 apps 用户的乘客运行。

是否可以让apps 用户而不是root 创建/拥有新日志?

我在production.rb 中使用的配置如下:

# Use default logging formatter so that PID and timestamp are not suppressed.
config.log_formatter = ::Logger::Formatter.new

config.logger = Logger.new(config.paths["log"].first, 3, 10.megabytes)

# Use a different logger for distributed setups.
# require 'syslog/logger'
# config.logger = ActiveSupport::TaggedLogging.new(Syslog::Logger.new 'app-name')

if ENV["RAILS_LOG_TO_STDOUT"].present?
  logger           = ActiveSupport::Logger.new(STDOUT)
  logger.formatter = config.log_formatter
  config.logger = ActiveSupport::TaggedLogging.new(logger)
end

【问题讨论】:

  • 您确定以正确的用户身份运行 rails 吗?您可以添加类似u = %x(whoami).strip; raise "Wrong user. Current user is #{u}" unless u == "apps" 的内容来测试它。这里假设系统支持whoami

标签: ruby-on-rails logrotate log-rotation


【解决方案1】:

我遇到了完全相同的问题。原来我有一个作为服务运行的进程的副本(使用 systemctl) - 我以为我暂时禁用了该服务。在这种情况下,日志文件将归“root”所有。

当我在前台启动第二个版本进行测试时,作为当前用户,一切似乎都工作正常,但最终它会尝试轮换属于 root 的日志文件,这会失败,从而有效地禁用日志记录。

【讨论】:

  • 嗨,很抱歉碰到一个老问题,但我也有同样的问题。你指的是什么后台进程?我怀疑这与我遇到的问题相同,只是不确定 ActiveSupport::Logger 使用什么以及在服务中寻找什么。
  • 后台进程是我使用 ActiveSupport 的 Rails Web 服务器。它由 systemctl 控制,它使用指定的用户(当时可能是 root)自动启动和重新启动它。这会将日志文件的所有权设置为 root。后来,当我手动启动服务器时,用户将被设置为 ubuntu,它没有轮换(root)日志文件的权限,导致失败。
猜你喜欢
  • 2019-06-07
  • 1970-01-01
  • 2019-07-15
  • 2011-06-06
  • 1970-01-01
  • 2011-10-30
  • 2014-10-08
  • 2019-08-21
  • 2013-08-30
相关资源
最近更新 更多