Что меняет флаг --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 делать то, что он не делал бы в любом случае, если бы файл журнала был устаревшим или заполненным для запуска настроенного условия вращения. Вы только заставляете это случиться прямо сейчас - потенциально удаляя самый старый файл, поэтому обычно вы хотите избегать его повторного запуска.