Logrotate: rotation des fichiers non log?

17

J'ai un script de sauvegarde qui compresse divers fichiers et répertoires et crée des archives .tgz. Les fichiers sont nommés, par exemple

...
backup_2010-10-28.tar.gz
backup_2010-10-29.tar.gz
backup_2010-10-30.tar.gz
backup_2010-10-31.tar.gz
backup_2010-11-01.tar.gz

Je souhaite gérer ces fichiers afin que seules les 5 dernières sauvegardes soient conservées, les fichiers plus anciens étant supprimés.

Puis-je utiliser logrotate pour ce faire? Ce ne sont pas des fichiers journaux et sont déjà compressés. Ils sont dans / root et non dans / var / log - puis-je toujours l'utiliser?

Merci

jen
la source

Réponses:

3

Logrotate fait pivoter les fichiers, donc la réponse est oui - probablement, et si aucune autorisation suffisante, placez-les dans / backup ou quelque chose. Vérifiez le groupe et l'utilisateur des journaux tournés :-).

Il existe des options pour la compression dans logrotate, så si "compress" n'est PAS configuré - eh bien, il n'essaiera pas. Toujours dans votre cas, option "rotation 5".

Jetez un oeil dans /etc/logrotate.d (ou partout où il est stocké dans votre système)

3molo
la source
26

Sans modification de votre processus, logrotate ne fera pas à lui seul ce que vous recherchez ici. Le problème clé ici est que, bien que logrotate puisse prendre des caractères génériques, il ne traitera pas les fichiers comme un seul si vous le faites et tentera plutôt de les faire pivoter tous individuellement, ce qui n'est certainement PAS ce que vous voulez.

Vous pouvez cependant le faire fonctionner comme vous le décrivez tant que la sauvegarde la plus récente est créée sans horodatage. Si votre processus de sauvegarde crée /root/backup.tar.gzpar exemple, vous pouvez utiliser la configuration logrotate suivante:

/root/backup.tar.gz {
    rotate 5
    nocompress
    dateext
    dateformat _%Y-%m-%d
    extension .tar.gz
    missingok
}

Le résumé rapide des options ici:

  • rotate 5 - garder 5 rotations avant de supprimer
  • nocompress - ne pas compresser les fichiers après rotation
  • dateext - utilisez la date comme extension de rotation au lieu d'incrémenter des nombres
  • dateformat _%Y-%m-%d - définissez le format d'extension de date que vous souhaitez utiliser
  • extension .tar.gz- faire .tar.gzvenir après l'extension de rotation
  • missingok - si le fichier que nous voulons faire tourner n'est pas là, ne vous en faites pas et continuez (le défaut est de lancer une erreur)

J'espère que cela t'aides!

marque
la source
1
Bon travail. J'ai appris deux ou trois choses en lisant ceci. Je tiens à ajouter cependant que certaines distributions, notamment RedHat EL, ont tendance à supprimer les options qui ne sont pas "Enterprise Ready", donc YMMV.
zerolagtime
Selon cette solution, stackoverflow.com/questions/14858752/… logrotate pourrait accomplir la tâche.
Pieter
22

Vous n'avez pas besoin d'utiliser logrotate pour le faire. Utilisez simplement une commande comme celle-ci:

ls -1 /root/backup_* | sort -r | tail -n +6 | xargs rm > /dev/null 2>&1

Cette commande laissera les 5 fichiers les plus récents et supprimera les autres (le cas échéant). Vous pouvez l'utiliser dans un travail cron.

Khaled
la source
mais cela ne tourne pas ....
simpleuser
Ne répond pas à la question.
kubanczyk
4
La question était de conserver les cinq sauvegardes les plus récentes et cela fait exactement cela. Encore plus simple: ls -t1 / root / backup_ * | queue -n +6 | xargs rm -f
yoyoma2
Cela a répondu à ma question. Malheureusement, la question d'origine était la plus proche que je pouvais trouver avec Google-fu.
Sukima
0

Je viens d'avoir la même situation. Logrotate semble assez cool mais cela n'a pas fonctionné pour moi à 100% car il ne correspond pas aux données et aux noms de fichiers.

Donc, pour éviter toute confusion, j'ai décidé d'incorporer la ligne suivante à exécuter après avoir créé ma sauvegarde actuelle afin de conserver les 5 dernières sauvegardes.

Mes journaux sont à savoir:

  • tbl-bcx-20180308_010501.tar.bz2
  • tbl-bcx-20180307_010501.tar.bz2
  • tbl-bcx-20180306_010501.tar.bz2

Nouvelle ligne dans mon script de sauvegarde (basé sur un commentaire ci-dessus)

  • find / BCX / dumpsql / -type f | sort -r | queue -n +6 | xargs rm

Cordialement,

200313
la source
-1

Vous pouvez le faire pivoter manuellement.

rotating_logger()
{

_LOG_FILE_=${1}
_MESSAGE_TO_ECHO_=${2}

_LOG_FILE_BYTES_SIZE_=`wc -c ${_LOG_FILE_} | awk '{print $1}'`

#echo "_LOG_FILE_BYTES_SIZE_ : ${_LOG_FILE_BYTES_SIZE_}"

# in MB
if [ ${_LOG_FILE_BYTES_SIZE_} -gt ${_FILE_SIZE_IN_BYTES_} ] ; then
        #cat /dev/null > ${_LOG_FILE_}
         for (( i=${_LOG_ROTATE_MAX_INDEX_}; i>=1; i-- ))
        do
                 if [ $i -eq ${_LOG_ROTATE_MAX_INDEX_} -a -f ${_LOG_FILE_}.$i ] ; then
                        rm -rf ${_LOG_FILE_}.$i
                 fi

                if [ $i -gt 10 ] ; then
                        rm -rf ${_LOG_FILE_}.10
                elif [ $i -eq 9 -a -f ${_LOG_FILE_}.9 ] ; then
                       mv ${_LOG_FILE_}.9 ${_LOG_FILE_}.10
                elif [ $i -eq 8 -a -f ${_LOG_FILE_}.8 ] ; then
                       mv ${_LOG_FILE_}.8 ${_LOG_FILE_}.9
                elif [ $i -eq 7 -a -f ${_LOG_FILE_}.7 ] ; then
                       mv ${_LOG_FILE_}.7 ${_LOG_FILE_}.8
                elif [ $i -eq 6 -a -f ${_LOG_FILE_}.6 ] ; then
                       mv ${_LOG_FILE_}.6 ${_LOG_FILE_}.7
                elif [ $i -eq 5 -a -f ${_LOG_FILE_}.5 ] ; then
                       mv ${_LOG_FILE_}.5 ${_LOG_FILE_}.6
                elif [ $i -eq 4 -a -f ${_LOG_FILE_}.4  ] ; then
                       mv ${_LOG_FILE_}.4 ${_LOG_FILE_}.5
                elif [ $i -eq 3 -a -f ${_LOG_FILE_}.3  ] ; then
                       mv ${_LOG_FILE_}.3 ${_LOG_FILE_}.4
                elif [ $i -eq 2 -a -f ${_LOG_FILE_}.2  ] ; then
                       mv ${_LOG_FILE_}.2 ${_LOG_FILE_}.3
                elif [ $i -eq 1 -a -f ${_LOG_FILE_}.1 ] ; then
                       mv ${_LOG_FILE_}.1 ${_LOG_FILE_}.2
                fi
        done
        mv ${_LOG_FILE_} ${_LOG_FILE_}.1
        touch ${_LOG_FILE_}
fi

echo `date +%Y-%m-%d:%H:%M:%S` : "${_MESSAGE_TO_ECHO_}" >> ${_LOG_FILE_}
#echo "" >> ${_LOG_FILE_}
}

Maintenant, pour mettre les données dans le journal, faites simplement

rotating_logger <file_path> "Welcome world!"
Krrish Krrish
la source
1
Vous pourriez peut-être mettre un peu d'effort dans la mise en forme de votre message, si vous voulez qu'il soit utile.
Tim