2 votes

Logrotate ne supprime pas les anciens fichiers

J'effectue une sauvegarde quotidienne à l'aide de logrotate. Je n'ai pas d'accès root à cette machine pour éditer le fichier normal logrotate.conf, c'est pourquoi je l'appelle par l'intermédiaire de crontab というように

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

Mon logrotate.conf ressemble à ceci :

/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
}

Le problème est que les anciens "logs" (sauvegardes SQL) ne sont pas éliminés par rotation/suppression. Ils restent sur place. Exécution ls -lt dans mon répertoire de sauvegarde donne des résultats étranges :

-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

Est-ce que j'ai mal compris le comportement de logrotate ?

2voto

JucaPirama Points 265

Il semble que 30 de vos fichiers (les plus anciens) utilisent un schéma de dénomination (db-DATE.sql.gz) et que les plus récents soient nommés différemment (db.sql.gz-DATE). Il semble également que les fichiers les plus récents aient l'attribut dateext est appliquée. Cela me fait penser à deux possibilités :

  1. Vous avez modifié le schéma de nommage avant d'atteindre le seuil de fichiers à faire tourner/supprimer, donc logrotate volonté supprimer les fichiers correspondant au nouveau schéma de nommage (db.sql.gz-DATE), mais seulement lorsqu'il y en a plus de 30 (actuellement il y a 9 fichiers). Les fichiers portant l'ancien nom doivent être supprimés manuellement par vos soins.
  2. Vous avez 2 fichiers conf différents de logrotate qui traitent le même ensemble de fichiers log. (probablement dans /etc/logrotate.d). Peut-être que lorsque vous avez testé, vous avez exécuté logrotate /etc/logrotate.d/your_conf.conf et a donc contourné certains paramètres de /etc/logrotate.conf (comme dateext ). Maintenant, la crontab exécute le fichier principal de logrotate et a généré la différence dans le nom des fichiers.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X