我希望每次启动服务时都进行日志文件轮换,但绝不会“自动”进行。
我正在运行一个基于 Python 的服务,该服务会记录到特定的日志文件。该服务(当前)不支持重新打开其日志文件的通知(例如USR1
trap)。此外,该服务一定不重新启动日志文件轮换(它正在产生连续的音频流,不应被中断)。
我所运行的系统没有硬件时钟,因此每次系统启动时时钟都会重置,这使得来自同一文件中不同重启的日志条目变得乏味(我多次获得相同的日期)。
我还想保留各种靴子的历史记录。
因此,我们的想法是在每次启动时(仅)使用日志旋转。
/usr/sbin/logrotate --force /etc/logrotate.d/myservice
在启动服务之前运行之类的操作应该可以解决问题。
现在我的问题是,是否可以这样配置 log-rotationg /etc/logrotate.d/myservice
,以便绝不自动运行?
一个简单的解决方案就是不是将我的 logrotate-config 文件存储在 中/etc/logrotate.d/
,但“在其他地方”。
但是,我希望我的用户能够在知名位置(这样他们就可以随意修改配置)。
答案1
您可以配置 logrotate 通过 copy-truncate 旋转文件,这样可以保留原始文件并且不需要您重新创建日志文件。
语法是:
/tmp/output.log {
size 1M
copytruncate
rotate 4
compress
}
这将复制当前文件,然后cat /dev/null > file
话虽如此,除非另有配置,否则 logrotate 只会“自动”旋转特定位置的文件。我猜想您正在将脚本记录到 /var/log/httpd,这就是它自动旋转的原因。
答案2
如果您不想/不需要使用 logrotate,为什么还要使用它呢?
只需从启动脚本旋转日志文件即可。