logrotate: «журнал не вращается» почему?

<p>у меня есть следующая новая конфигурация logrotate:</p><pre><code>/var/log/nexus/nexus.log { rotate 7 missingok compress delaycompress copytruncate daily } </code></pre><p>когда я бегу <code>logrotate -d nexus</code>, я получаю следующее:</p><pre><code>reading config file nexus reading config info for /var/log/nexus/nexus.log handling 1 logs rotating pattern: /var/log/nexus/nexus.log after 1 days (7 rotations) empty log files are rotated, old logs are removed considering log /var/log/nexus/nexus.log log does not need rotating </code></pre><p>моя папка/var/log/nexus/содержит следующее:</p><pre><code>nexus.log oldlogs.tar.gz </code></pre><p>почему logrotate не вращает файл nexus.log? я ожидал, что файл nexus.log будет обрезан и будет создан новый файл, например, nexus.log-201106241000.</p>

<p>скорее всего, файл журнала менее одного дня и/или был повернут в течение последнего дня, и logrotate запоминает историю.</p><p>если вы добавите <code>-f</code> это вызовет ротацию, если вы действительно этого хотите (хотя не уверены на 100%, как это взаимодействует с <code>-d</code>).</p><p>вы можете посмотреть историю, местоположение зависит от вашего дистрибутива, но может быть <code>/var/lib/logrotate/status</code>. этот файл показывает, когда журналы последний раз вращались.</p>

<p>при первом запуске logrotate с новой конфигурацией журнала он не знает, когда произошла последняя ротация журнала, поэтому он просто записывает строку состояния в <code>/var/lib/logrotate/status</code> о том, что он был запущен сегодня.</p><p>когда он впоследствии запускается на следующий день, он видит, что журнал имеет дневной возраст, и поворачивает его, как ожидалось. если вы не хотите ждать, отредактируйте файл состояния logrotate и перенесите дату статуса вашего журнала на предыдущий день.</p><p>когда вы запускаете logrotate вручную, он будет работать как положено</p>

<p>иногда, даже если вы запускаете logrotate вручную, это не будет работать, если вы сделаете это в тот же день и у вас будет <code>dateext</code>, где значение по умолчанию не включает в себя секунды (например, <code>-%y%m%d</code>). даже если вы изменяете файл состояния logrotate или когда используете директиву размера (например, <code>size 200m</code>). по крайней мере в centos 6, logrotate не сможет повернуть ваш файл журнала, потому что он уже существует.</p><p>чтобы решить эту проблему, вам нужно использовать <code>dateformat</code> вместо <code>dateext</code> со значением, подобным: <code>%y%m%d%s</code>.</p><p>видеть <code>man logrotate</code> за дополнительной информацией.</p>

<p>остерегайтесь этого, запустив</p><pre><code>logrotate -vdf /etc/logrotate.conf </code></pre><p>событие, хотя только смоделированное, будет записано в <code>/var/lib/logrotate.status</code> и последующие запуски logrotate ответят указанным</p><pre><code>log does not need rotating </code></pre>