如何在 Ubuntu 上轮换应用程序日志?

如何在 Ubuntu 上轮换应用程序日志?

我使用的是 Ubuntu Linux 14.04,我在日志轮换方面遇到问题。我有这个文件

rails@myapp:~$ ls -al myapp/log/production.log
-rw-r--r-- 1 rails rails 4522482443 Jun  5 12:11 myapp/log/production.log

我的 /etc/logrotate.conf 文件中有这个,

/home/rails/myapp/log {
        daily
        rotate 4
        compress
        delaycompress
        missingok
        notifempty
        create 644 root root
}

但我的日志从未旋转过。我知道这一点是因为我可以在“myapp/log/Production.log”文件中看到 5 月 8 日的条目。日志每天都在变大。我还需要做什么才能轮换我的日志?

答案1

首先,很可能您没有自动运行 logrotate(通常通过 cron 守护进程)。

其次,您在 logrotate 配置文件中指定要轮换文件 /home/rails/myapp/log 但在 ls 输出中向我们显示 /home/rails/myapp/log/production.log 文件(我是假设 ~rails -> /home/rails)。并且您还要求 logrotate 创建新的空日志文件,其所有者为 root:root,但在 ls 输出中,原始文件又是rails:rails 的属性。

TL;博士;请改用此配置文件(并确保 logrotate 由 cron 或类似文件不时运行):

/home/rails/myapp/log/production.log {
        daily
        rotate 4
        compress
        delaycompress
        missingok
        notifempty
        create 644 rails rails
}

另请注意,您可能需要使用 postrotate 重新启动应用程序,以强制其停止写入指向旋转文件的文件描述符。

答案2

尝试这个。

/home/rails/myapp/log

{  
   su rails rails
   daily
   missingok
   compress
   notifempty
   rotate 12
   create
   delaycompress
   missingok
   }

将其放入 /etc/logrotate.d/myapp

非常小的解释。 Logroatate 将写入您的 $HOME,因此 myapp.log 的旋转必须作为 Rails 执行。

su rails rails   

抱歉,来自联机帮助页的更多内容

su 用户组 轮换在此用户和组下设置的日志文件,而不是使用默认用户/组(通常为 root)。 user 指定用于轮换的用户名,group 指定用于轮换的组。如果您在此处指定的用户/组没有足够的权限来创建具有您在创建指令中指定的所有权的文件,则会导致错误。

创建模式所有者组,创建所有者组 轮换后(运行 postrotate 脚本之前)将立即创建日志文件(与刚刚轮换的日志文件同名)。 mode 以八进制指定日志文件的模式(与 chmod(2) 相同),owner 指定将拥有日志文件的用户名,group 指定日志文件所属的组。任何日志文件属性都可以省略,在这种情况下,新文件的这些属性将使用与原始日志文件相同的值来表示省略的属性。可以使用 nocreate 选项禁用此选项。

抱歉,我无法用英语更好地解释。

相关内容