--force 标志对 logrotate 的行为有何改变?

--force 标志对 logrotate 的行为有何改变?

我试图找出为什么 logrotate 在不带标志的情况下运行时仅旋转文件夹中的日志文件子集--force。手册页logrotate --force简单地说:

告诉 logrotate 强制轮换,即使它认为没有必要。有时在将新条目添加到 logrotate 配置文件后,或者手动删除旧日志文件后,这很有用,因为将创建新文件,并且日志记录将继续正确进行。

我目前的理论是,这与文件年龄有关,因为未旋转的文件是由不同的应用程序写入的,该应用程序会在每次写入时重置日志文件 ctime。

配置/etc/logrotate.d/文件如下:

"/var/log/web_app/*.log" {
  su www-data www-data
  daily
  rotate 21
  maxsize 2G
  compress
  dateext
  copytruncate
  delaycompress
  missingok
}

文件logrotate.status显示(仅注意cgi.log实际上已经旋转):

"/var/log/web_app/cgi.log" 2019-2-11-6:25:34
"/var/log/web_app/api.log" 2019-2-11-6:0:0
"/var/log/web_app/db.log" 2019-2-11-6:0:0

logrotate --debug报告:

rotating pattern: "/var/log/web_app/*.log"  after 1 days (21 rotations)
empty log files are rotated, log files >= 2147483648 are rotated earlier, old logs are removed
switching euid to 33 and egid to 33
considering log /var/log/web_app/api.log
  log does not need rotating
considering log /var/log/web_app/db.log
  log does not need rotating
considering log /var/log/web_app/cgi.log
  log does not need rotating
switching euid to 0 and egid to 0

head /var/log/web_app/api.log显示此日志文件尚未轮换(撰写本文时已有 3 天):

2019-02-08 16:50:54,492 - general (Process1-MainThread) - INFO - Starting instance of WEB_APP

stat在同一个文件上显示:

  File: '/var/log/web_app/api.log'
  Size: 6307        Blocks: 16         IO Block: 4096   regular file
Device: ca11h/51729d    Inode: 751580      Links: 1
Access: (0644/-rw-r--r--)  Uid: (   33/www-data)   Gid: (   33/www-data)
Access: 2019-02-11 13:17:46.639667970 +0000
Modify: 2019-02-11 09:16:43.779964966 +0000
Change: 2019-02-11 09:16:43.779964966 +0000
 Birth: -

答案1

每当日志旋转确定给定文件是否需要旋转,该--force标志使其无条件回答“是的,这个文件需要旋转”。它只是logrotate忽略配置的旋转触发器 - 注意年龄并不是唯一可能的触发因素,它的作用方式与尺寸

如果您知道旋转可以使用--force,但没有 则无法使用 ,则您可能希望使用--debug和不使用继续--force。您将获得每份已处理文件的一行解释。如果你使用,--force你将看不到解释,因为它们会被跳过(findNeedRotating参见logrotate.c

国旗--force不是制作日志旋转如果日志文件已经老化/填满,它会执行任何本来不会执行的操作来触发配置的轮换条件。您只是强制它现在发生 -可能会删除最旧的文件,因此通常要避免重复运行它

相关内容