(第一次发帖,如果它看起来像一个醉酒的蜘蛛已经格式化了,那么对不起)
在使用我们的朋友 Google 之后,我不记得我在哪里使用 logrotate (而不是 cron 或其他等效项)设法实现了一些目标。
我在 /var/log/rsync/ 中有以下内容:
-rw-r--r-- 1 root root 1.1M Apr 9 08:13 2014-04-09 07:48:18.log
-rw-r--r-- 1 root root 1.4M Apr 11 15:20 2014-04-11 15:02:52.log
-rw-r--r-- 1 root root 1.6M Apr 11 15:42 2014-04-11 15:22:04.log
-rw-r--r-- 1 root root 1.8M Apr 12 08:01 2014-04-12 07:45:31.log
-rw-r--r-- 1 root root 2.0M Apr 13 08:10 2014-04-13 07:53:38.log
-rw-r--r-- 1 root root 2.2M Apr 14 08:19 2014-04-14 07:51:09.log
-rw-r--r-- 1 root root 2.5M Apr 15 08:05 2014-04-15 07:37:38.log
-rw-r--r-- 1 root root 2.7M Apr 16 08:11 2014-04-16 07:43:14.log
和以下 logrotate 文件:
/var/log/rsync/*.log {
daily
rotate 7
compress
delaycompress
notifempty
missingok
}
我认为这是完全合理的。但是在它拒绝工作并且发现它永远不会工作(由这篇文章提供)之后,我想知道是否可以捏造它使其工作。
经过大量测试和调整后,我设法通过以下方式对其进行了捏造:
/var/log/rsync/dummy {
daily
rotate 0
create
ifempty
lastaction
/usr/bin/find /var/log/rsync/ -mtime +7 -delete
/usr/bin/find /var/log/rsync/ -mtime +1 -exec gzip -q {} \;
endscript
}
进入一个名为 /etc/logrotate.d/local-rsync 的 logrotate 配置文件。然后创建虚拟日志文件:
touch /var/log/rsync/dummy
然后强制进行logrotate:
logrotate -fv /etc/logrotate.d/local-rsync
这使:
-rw-r--r-- 1 root root 71K Apr 9 08:13 2014-04-09 07:48:18.log.gz
-rw-r--r-- 1 root root 88K Apr 11 15:20 2014-04-11 15:02:52.log.gz
-rw-r--r-- 1 root root 82K Apr 11 15:42 2014-04-11 15:22:04.log.gz
-rw-r--r-- 1 root root 84K Apr 12 08:01 2014-04-12 07:45:31.log.gz
-rw-r--r-- 1 root root 87K Apr 13 08:10 2014-04-13 07:53:38.log.gz
-rw-r--r-- 1 root root 92K Apr 14 08:19 2014-04-14 07:51:09.log.gz
-rw-r--r-- 1 root root 2.5M Apr 15 08:05 2014-04-15 07:37:38.log
-rw-r--r-- 1 root root 2.7M Apr 16 08:11 2014-04-16 07:43:14.log
-rw-r--r-- 1 root root 0 Apr 16 12:11 dummy
现在只等明天早上...
我意识到 cron 会更整洁,但是我在 logrotate 配置文件中有另一个元素,并希望将两者保持在一起。
虚拟文件的好处是它不占用任何空间!
您可能会发现它似乎一天没有旋转任何东西。我花了一段时间才弄清楚原因,但后来它开始发芽了。find -mtime +1 是一整天(即 24 * 60 分钟),如果自上次创建日志后不到 24 小时开始每日 logrotate,则有时它似乎不起作用。如果它困扰您,那么使用 find -mmin +1380 的 23 小时可能更合适。