(первое сообщение, так что если оно выглядит как пьяный паук, отформатировавшее его, то извините)
После использования нашего друга 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
}
в конфигурационный файл logrotate с именем /etc/logrotate.d/local-rsync. Затем создайте фиктивный файл журнала:
touch /var/log/rsync/dummy
затем принудительно войдите в систему с помощью:
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 часа с момента последнего времени / времени создания журналов, то иногда кажется, что он не работал. Если вас это беспокоит, то лучше использовать 23 часа с find -mmin +1380.