postgres_db_dump_20091016.gz.1.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 postgres_db_dump_20091017.gz.1.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 postgres_db_dump_20091018.gz.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 postgres_db_dump_20091019.gz.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 postgres_db_dump_20091020.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 postgres_db_dump_20091021.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021
这是我强制运行logrotate时的示例输出(文件名)。 不知何故,它不识别旧的文件。
debugging输出示例:
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' glob finding old rotated logs failed renaming /var/backup/postgres/postgres_db_dump_20091019.gz.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 to /var/backup/postgres/postgres_db_dump_20091019.gz.1.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 rotating log /var/backup/postgres/postgres_db_dump_20091020.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021, log->rotateCount is 4 dateext suffix '-20091021' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' glob finding old rotated logs failed renaming /var/backup/postgres/postgres_db_dump_20091020.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 to /var/backup/postgres/postgres_db_dump_20091020.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 rotating log /var/backup/postgres/postgres_db_dump_20091021.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021, log->rotateCount is 4 dateext suffix '-20091021' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' glob finding old rotated logs failed renaming /var/backup/postgres/postgres_db_dump_20091021.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021 to /var/backup/postgres/postgres_db_dump_20091021.gz.1.1.1.1.1.1.1.1.1-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021-20091021
和configuration文件:
daily rotate 4 create 666 root root maxage 30 dateext compress missingok notifempty noolddir # system-specific logs may be also be configured here. /var/log/* { size=10M postrotate /usr/bin/killall -HUP syslog-ng endscript } /var/backup/postgres/postgres* { nocompress nocreate }
这里的其他答案是正确的,你需要改变你的configuration文件正在匹配。 在/ var / log中的文件可能会出现同样的问题,但是压缩和10M大小限制的组合却阻止了它的发生。
还有另外一个问题,我想指出。 Logrotate的构build依赖于一致的日志文件名来旋出旧文件。 当它处理一个日志文件时,它会使用它作为基本名称,通过search旧版本可能具有的特定扩展名来查找它的所有旧版本。 这就是你的debugging日志中的glob东西正在寻找的东西。 由于你的文件名每次都因为date而改变,所以它永远不会回头看看那些旧的,因为现在正在处理的文件名不匹配。
有两件事你可以做。 第一个选项是设置postgres或任何脚本创build该转储文件不使用date。 保持文件名一致将使logrotate做的事情,并清除旧的。 或者,您可以完全跳过logrotate,并在crontab中添加如下内容:
0 4 * * * find /var/backup/postgres/postgres_db_dump_*.gz -mtime +10 -delete
这将每晚运行并删除超过10天的转储文件。
/var/log/* { size=10M postrotate /usr/bin/killall -HUP syslog-ng endscript }
/var/log/*是你的问题。 这匹配/ var / log中的所有文件,包括已经压缩的文件。 您需要优化该匹配模式以匹配非压缩文件。
logrotate的说明书说
Please use wildcards with caution. If you specify *, logrotate will rotate all files, including previously rotated ones. A way around this is to use the olddir directive or a more exact wildcard (such as *.log).