Назад | Перейти на главную страницу

Что меняет флаг --force в поведении logrotate?

Я пытаюсь выяснить, почему logrotate вращает только подмножество файлов журнала в папке при запуске без --force флаг. Страница руководства для logrotate --force просто говорит:

Сообщает logrotate принудительно выполнить поворот, даже если он не считает это необходимым. Иногда это полезно после добавления новых записей в файл конфигурации logrotate или если старые файлы журналов были удалены вручную, поскольку новые файлы будут созданы, и ведение журнала будет продолжаться правильно.

Моя текущая теория состоит в том, что это связано с возрастом файла, поскольку невращаемые файлы записываются другим приложением, которое сбрасывает ctime файла журнала при каждой записи.

В /etc/logrotate.d/ файл конфигурации выглядит следующим образом:

"/var/log/web_app/*.log" {
  su www-data www-data
  daily
  rotate 21
  maxsize 2G
  compress
  dateext
  copytruncate
  delaycompress
  missingok
}

В logrotate.status файл показывает (только примечание cgi.log был фактически повернут):

"/var/log/web_app/cgi.log" 2019-2-11-6:25:34
"/var/log/web_app/api.log" 2019-2-11-6:0:0
"/var/log/web_app/db.log" 2019-2-11-6:0:0

И logrotate --debug отчеты:

rotating pattern: "/var/log/web_app/*.log"  after 1 days (21 rotations)
empty log files are rotated, log files >= 2147483648 are rotated earlier, old logs are removed
switching euid to 33 and egid to 33
considering log /var/log/web_app/api.log
  log does not need rotating
considering log /var/log/web_app/db.log
  log does not need rotating
considering log /var/log/web_app/cgi.log
  log does not need rotating
switching euid to 0 and egid to 0

head /var/log/web_app/api.log показывает, что этот файл журнала не был повернут (на момент написания 3 дня назад):

2019-02-08 16:50:54,492 - general (Process1-MainThread) - INFO - Starting instance of WEB_APP

stat в том же файле показывает:

  File: '/var/log/web_app/api.log'
  Size: 6307        Blocks: 16         IO Block: 4096   regular file
Device: ca11h/51729d    Inode: 751580      Links: 1
Access: (0644/-rw-r--r--)  Uid: (   33/www-data)   Gid: (   33/www-data)
Access: 2019-02-11 13:17:46.639667970 +0000
Modify: 2019-02-11 09:16:43.779964966 +0000
Change: 2019-02-11 09:16:43.779964966 +0000
 Birth: -

Когда бы ни logrotate определяет, нужно ли повернуть данный файл, --force флаг заставляет его ответить безоговорочно "да, этот файл нужно повернуть". Это просто делает logrotate не обращайте внимания на настроенные триггеры вращения - обратите внимание, что возраст не единственный возможный триггер, он работает таким же образом для размер.

Если вы знаете, что ваша ротация работает с --force, но не без этого, вы, вероятно, захотите продолжить --debug и без --force. Вы получите пояснение к каждому обработанному файлу. Если вы использовали --force вы не увидите объяснений, так как они будут пропущены (см. findNeedRotating в logrotate.c)

В --force флаг будет не делать logrotate делать все, что он не делал бы в любом случае, если бы файл журнала устарел / заполнился, чтобы вызвать настроенное условие поворота. Вы только заставляете это происходить прямо сейчас - возможно удаление самого старого файла, поэтому вы обычно не хотите запускать его повторно.