Logrotate не удаляет старые файлы

У меня есть ежедневное резервное копирование с использованием logrotate. У меня нет корневого доступа к этому компьютеру для редактирования обычного logrotate.conf, поэтому я вызываю его через crontab так:

0 4 * * * /usr/sbin/logrotate /home/myuser/backups/logrotate.conf --state /home/myuser/backups/logrotate.tmp

Мой logrotate.conf выглядит как это:

/home/myuser/backups/mysql/production/db.sql.gz {
    daily
    nocompress
    dateext
    missingok
    rotate 30
    extension *.sql.gz
    sharedscripts
    postrotate
        mysqldump --login-path=production mydatabase --single-transaction | $(which gzip) > /home/myuser/backups/mysql/production/db.sql.gz
    endscript
}

Проблема в том, что старые «журналы» (резервные копии SQL) не удаляются и не меняются. Они просто остаются. Выполнение ls -lt в моем каталоге резервных копий дает мне некоторые странные результаты:

-rw-r--r-- 1 myuser mygroup 3799057 Apr 17 04:00 db.sql.gz
-rw-r--r-- 1 myuser mygroup 3799221 Apr 16 04:00 db.sql.gz-20190417
-rw-r--r-- 1 myuser mygroup 3799167 Apr 15 04:00 db.sql.gz-20190416
-rw-r--r-- 1 myuser mygroup 3799090 Apr 14 04:00 db.sql.gz-20190415
-rw-r--r-- 1 myuser mygroup 3799136 Apr 13 04:00 db.sql.gz-20190414
-rw-r--r-- 1 myuser mygroup 3799107 Apr 12 04:00 db.sql.gz-20190413
-rw-r--r-- 1 myuser mygroup 3792122 Apr 11 04:00 db.sql.gz-20190412
-rw-r--r-- 1 myuser mygroup 3794498 Apr 10 04:00 db.sql.gz-20190411
-rw-r--r-- 1 myuser mygroup 3798082 Apr  9 04:00 db.sql.gz-20190410
-rw-r--r-- 1 myuser mygroup 3793882 Apr  8 04:00 db-20190409.sql.gz
-rw-r--r-- 1 myuser mygroup 3793695 Apr  7 04:00 db-20190408.sql.gz
-rw-r--r-- 1 myuser mygroup 3794418 Apr  6 04:00 db-20190407.sql.gz
-rw-r--r-- 1 myuser mygroup 3790567 Apr  5 04:00 db-20190406.sql.gz
-rw-r--r-- 1 myuser mygroup 3792162 Apr  4 04:00 db-20190405.sql.gz
-rw-r--r-- 1 myuser mygroup 3783503 Apr  3 04:00 db-20190404.sql.gz
-rw-r--r-- 1 myuser mygroup 3781192 Apr  2 04:00 db-20190403.sql.gz
-rw-r--r-- 1 myuser mygroup 3782857 Apr  1 04:00 db-20190402.sql.gz
-rw-r--r-- 1 myuser mygroup 3785592 Mar 31 04:00 db-20190401.sql.gz
-rw-r--r-- 1 myuser mygroup 3771475 Mar 30 04:00 db-20190331.sql.gz
-rw-r--r-- 1 myuser mygroup 3771263 Mar 29 04:00 db-20190330.sql.gz
-rw-r--r-- 1 myuser mygroup 3751782 Mar 28 04:00 db-20190329.sql.gz
-rw-r--r-- 1 myuser mygroup 3632604 Mar 27 04:00 db-20190328.sql.gz
-rw-r--r-- 1 myuser mygroup 3744550 Mar 26 04:00 db-20190327.sql.gz
-rw-r--r-- 1 myuser mygroup 3608617 Mar 25 05:00 db-20190326.sql.gz
-rw-r--r-- 1 myuser mygroup 3642558 Mar 24 05:00 db-20190325.sql.gz
-rw-r--r-- 1 myuser mygroup 3600705 Mar 23 05:00 db-20190324.sql.gz
-rw-r--r-- 1 myuser mygroup 3735972 Mar 22 05:00 db-20190323.sql.gz
-rw-r--r-- 1 myuser mygroup 3600285 Mar 21 05:00 db-20190322.sql.gz
-rw-r--r-- 1 myuser mygroup 3737448 Mar 20 05:00 db-20190321.sql.gz
-rw-r--r-- 1 myuser mygroup 3741454 Mar 19 05:00 db-20190320.sql.gz
-rw-r--r-- 1 myuser mygroup 3603502 Mar 18 05:00 db-20190319.sql.gz
-rw-r--r-- 1 myuser mygroup 3617021 Mar 17 05:00 db-20190318.sql.gz
-rw-r--r-- 1 myuser mygroup 3612493 Mar 16 05:00 db-20190317.sql.gz
-rw-r--r-- 1 myuser mygroup 3753894 Mar 15 05:00 db-20190316.sql.gz
-rw-r--r-- 1 myuser mygroup 3742415 Mar 14 05:00 db-20190315.sql.gz
-rw-r--r-- 1 myuser mygroup 3733984 Mar 13 05:00 db-20190314.sql.gz
-rw-r--r-- 1 myuser mygroup 3594213 Mar 12 05:00 db-20190313.sql.gz
-rw-r--r-- 1 myuser mygroup 3594515 Mar 11 05:00 db-20190312.sql.gz
-rw-r--r-- 1 myuser mygroup 3622672 Mar 10 05:00 db-20190311.sql.gz

Не понимаю ли я поведение logrotate ?

2
задан 17 April 2019 в 18:29
1 ответ

Похоже, 30 ваших файлов (самые старые) используют схему именования (db-DATE.sql.gz), а более новые имеют разные имена (db.sql.gz-DATE ). Также похоже, что к более новым была применена опция dateext . Это заставляет меня задуматься о двух возможностях:

  1. Вы изменили схему именования до того, как достигли порогового значения файлов для вращения / удаления, поэтому logrotate удалит файлы, соответствующие новой схеме именования (db.sql.gz -ДАТА), но только когда их больше 30 (на данный момент файлов 9). Файлы со старым именем должны быть удалены вами вручную.
  2. У вас есть 2 разных файла logrotate conf, обрабатывающих один и тот же набор файлов журнала. (возможно, внутри /etc/logrotate.d). Возможно, когда вы тестировали, вы запустили logrotate /etc/logrotate.d/your_conf.conf и таким образом обошли некоторые настройки /etc/logrotate.conf (например, dateext ]). Теперь crontab выполняет главный файл logrotate и сгенерировал разницу в именах файлов.
1
ответ дан 3 December 2019 в 12:30

Теги

Похожие вопросы