尽管有正在运行的进程,我该如何轮换我的日志?

尽管有正在运行的进程,我该如何轮换我的日志?

我正在运行 Ubuntu 14.04。我有这个 Rails 项目,我的日志在大小方面正在失控地激增……

myuser@myapp:~$ ls -al /home/rails/myapp/log/
total 3118220
drwxr-xr-x  2 rails rails       4096 Jul  3 22:31 .
drwxr-xr-x 15 rails rails       4096 Sep 21 17:21 ..
-rw-rw-r--  1 rails rails          0 Jun 22 10:22 development.log
-rw-rw-r--  1 rails rails      14960 Jun  1 22:39 development.log.1
-rw-rw-r--  1 rails rails          0 Oct 22  2016 .keep
-rw-r--r--  1 rails rails  178464887 Oct 11 10:00 production.log
-rw-r--r--  1 rails rails    8615654 Jul  3 22:31 production.log.1
-rw-r--r--  1 rails rails  640621243 Jun 29 13:16 production.log.2.gz
-rw-rw-r--  1 rails rails 2016391330 Oct 11 10:09 sidekiq.log
-rw-rw-r--  1 rails rails  348853619 Jul  3 22:31 sidekiq.log.1
-rw-rw-r--  1 rails rails          0 Jul  3 22:31 test.log
-rw-rw-r--  1 rails rails      54246 Jul  3 22:31 test.log.1

我已经设置了这个日志轮换规则..l

myuser@myapp:~$ cat /etc/logrotate.d/myapp
/home/rails/myapp/log/*.log {
    daily
    missingok
    compress
    notifempty
    rotate 12
    create
    delaycompress
    missingok
    su rails rails
    postrotate
        pkill -USR1 -u rails unicorn
    endscript
}

然而,尽管我加入了“技能”命令,但物体仍然没有旋转。有人推测,物体没有旋转是因为有正在运行的进程,例如下面的

myuser@myapp:~$ ps -elf | grep sidekiq
1 S rails    23864     1  1  80   0 - 254353 -     Oct10 ?        00:10:49 sidekiq 5.0.0 myapp [1 of 1 busy]

我想知道如何在进程运行的情况下轮换日志。如果这不是问题,那么我只想轮换日志。

答案1

正在运行的进程很可能阻止日志轮换。您有两个选择。要么在 postrotate 部分重新启动进程(sidekiq),要么使用复制截断选项来就地截断原始文件而不是删除它。

答案2

您有多种选择。

  • 尝试使用标准.这可以最大限度地减少在其他选项中发生的数据丢失。
  • 出于某种原因,如果这不可能,则在 logrotate 配置中使用 copytruncate 指令。这仅在使用以下方式打开日志文件时才有效:附加旗帜。
  • 如果以上方法均无效,请在 postrotate 部分重新启动该过程或通过信号您的脚本将处理日志文件的重新打开(这样您就不必重新启动该过程)

相关内容