帮我弄清楚tomcat日志的轮换。我在服务器上配置了 logrotation.conf,添加到它
/usr/local/tomcat9/logs {
daily
rotate 7
size 10M
compress
missingok
delaycompress
dateext
}
然后我运行命令logrotate -d /etc/logrotate.conf
,但没有任何反应。如果您一次获取一个文件,那么由于某种原因它不会归档它们,而只是重命名它们
renaming /usr/local/tomcat9/logs/catalina.out to /usr/local/tomcat9/logs/catalina.out-20191004
creating new /usr/local/tomcat9/logs/catalina.out mode = 0777 uid = 1001 gid = 1001
请帮助我了解如何正确执行此操作,以便他查看整个日志文件夹。
一个选项
-d
只是一个指令“什么都不做,只打印调试消息”。但是,不使用此选项运行可能不会像您预期的那样运行:文件不会在每次运行时轮换。该程序跟踪旋转(通常在一个文件中
/var/lib/logrotate/status
- 检查您的发行版的手册页)。所以比你在 conf 中指定的指令更频繁地旋转。文件,它肯定不会。logrotate没有经过归档训练。它可以(引用手册页的标题)旋转(您所谓的“重命名”)、压缩和邮寄。
当然,它也可以调用本节中描述的脚本:a) 在节处理的最开始 -
firstaction
,b) 文件轮换前 -prerotate
,c) 文件轮换后 -postrotate
和 d) 在节处理结束时 -lastaction
。在脚本中 - 是的,您也可以调用归档程序。
您提到了该指令
compress
-多亏了它,旋转的文件将被压缩。您还提到了该选项delaycompress
-在第一次旋转期间,文件不会被压缩,仅在第二次旋转期间。logrotate没有在这方面受过训练。它不执行任何递归搜索。
它需要指定文件 - 特定的名称,或者属于指定的掩码。
如果掩码太“宽” -
*
,那么您需要使用olddir
程序将在其中移动旋转文件的指令(如果未指定,并且已经旋转的文件将保留在与原始文件相同的目录中,它们将被重新在下一次开始旋转)。添加。阅读:
如果您忘记了
-d
在另一个答案中详细描述的 ,那么您的第一个问题就是delaycompress
。这个问题不能被称为问题,因为你做得对。该指令
delaycompress
告诉 logrotate 不要立即压缩文件。压缩意味着将文件压缩成另一个文件然后删除。现在的问题是:如果文件仍然被写入日志的程序打开,会发生什么?程序将继续将日志写入已删除的文件,但一旦程序关闭此文件,自删除后写入那里的所有数据都将被遗忘。然后你会对原木上的洞感到惊讶。因为您通过指示 logrotate 不要立即压缩文件来做正确的事情。您没有做的是告诉您的守护程序重新打开日志文件(通常使用信号
HUP
)。这意味着您仍然可能面临上述情况。或者,您可以使用指令
copytruncate
,但在这里您再次冒丢失日志的风险。