使用文件名中的时间戳旋转日志文件

joh*_*rds 3 log-files logging logrotate

我有一个我的应用程序写入的日志目录。它会创建一个这样的日志文件:

2015-01-22-10-full-activity.log
2015-01-22-11-full-activity.log
2015-01-22-12-full-activity.log
2015-01-22-13-full-activity.log
Run Code Online (Sandbox Code Playgroud)

我想压缩除最新文件之外的每个文件并删除任何超过 3 天的文件。

我认为 logrotate 可以为我做到这一点,但我无法理解,这可能是因为我用名称中的时间命名了我的活动日志。

有任何想法吗?

Cra*_*ell 6

如果您已经在创建名称中带有日期的文件,那么 logrotate 不是答案;它基于应用程序始终写入同一个日志文件(例如 /var/log/app/output.log)的想法,然后 logrotate 负责重命名/压缩文件并告诉应用程序重新打开再次原始目标文件。

在这种情况下,也许是一对使用“find”和 -mtime 的 cron 作业,例如:

1 0 * * * root find /path/to/logs/*.log -mtime +1 -daystart -exec gzip {} \;

2 0 * * * root find /path/to/logs/*.log.gz -mtime +3 -daystart -delete

您可能希望摆弄 -mtime 上的数字并使用 -daystart(或不使用)来获得所需的精确结果(取决于您想如何计算“天数”等)

  • 根据“find”的手册页“[-daystart]选项仅影响稍后出现在命令行上的测试。”,所以这不应该是“-daystart -mtime +1”和“-daystart -mtime +3” `,分别? (2认同)