Что меняет флаг --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: -

1 ответ

Решение

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

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

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

Другие вопросы по тегам