Answers:
您也许可以使用firstaction或lastaction指令调用测试磁盘可用空间的Shell脚本,然后对最早的文件运行删除操作。
firstaction/endscript
The lines between firstaction and endscript (both of which must appear on lines by themselves) are
executed (using /bin/sh) once before all log files that match the wildcarded pattern are rotated,
before prerotate script is run and only if at least one log will actually be rotated. These
directives may only appear inside a log file definition. Whole pattern is passed to the script as
first argument. If the script exits with error, no further processing is done. See also lastac-
tion.
更新:
这是有关您可以运行的脚本类型的Stackoverflow帖子:
logrotate本身没有这种选择。您可以添加一个cron脚本,该脚本可以找到最旧的日志,以在可用空间低于您的标准时将其删除。您也可以进行其他验证。但是,始终使磁盘太满不是一个好主意,因为系统将无法创建较大的临时文件,并且可能导致应用程序故障。
我只是想指出,在某些情况下,您不希望日志填充所有可用的磁盘空间。我已经用精简配置的/ var目录处理了几台主机,并且将日志保持在一定大小是至关重要的。我们将cronies作业与logrorate结合使用以减小尺寸。在您的环境中可以使用类似的方法,尽管像splunk或syslog-ng这样的中央日志服务器可能是更好的选择。
正如@cjc建议的那样,您可以使用firstaction。请参阅以下示例:
/mnt/user/logs/*.log /mnt/user/logs/*/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
su root www-data
create 760 root www-data
firstaction
for file in `find -type f -size +1024M`; do
percent=`df -h | grep /mnt/user | awk '{print $5}' | sed 's/%//'`
if [ $percent -gt 50 ]; then
echo "Removed $file" >> /mnt/user/logs/logrotate.log
rm $file
fi
done;
endscript
}
在此示例中,如果分区使用的空间大于50%,则从/ mnt / user分区中删除大于1GB的文件。