Logrotate: Nicht-Protokolldateien drehen?

17

Ich habe ein Backup-Skript, das verschiedene Dateien und Verzeichnisse komprimiert und .tgz-Archive erstellt. Dateien werden benannt, z

...
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

Ich möchte diese Dateien verwalten, damit nur die letzten 5 Sicherungen aufbewahrt werden und ältere Dateien gelöscht werden.

Kann ich dazu logrotate verwenden? Sie sind keine Protokolldateien und bereits komprimiert. Sie sind in / root und nicht in / var / log - kann ich es trotzdem benutzen?

Vielen Dank

jen
quelle

Antworten:

3

Logrotate dreht Dateien, daher lautet die Antwort wahrscheinlich "Ja". Wenn keine ausreichenden Berechtigungen vorhanden sind, platzieren Sie diese in / backup oder so. Überprüfen Sie, welche Gruppe und Benutzer die gedrehten Protokolle haben :-).

Es gibt Optionen für die Komprimierung in logrotate. Wenn "compress" NICHT konfiguriert ist, wird dies nicht versucht. Auch in Ihrem Fall die Option "5 drehen".

Schauen Sie in /etc/logrotate.d nach (oder wo immer es in Ihrem System gespeichert ist)

3molo
quelle
26

Ohne eine Änderung an Ihrem Prozess wird Logrotate allein nicht das tun, wonach Sie hier suchen. Das Hauptproblem hierbei ist, dass logrotate zwar Platzhalterzeichen akzeptiert, die Dateien in diesem Fall jedoch nicht als eine behandelt und stattdessen versucht, alle Dateien einzeln zu drehen. Dies ist definitiv NICHT das, was Sie möchten.

Sie können es jedoch so einrichten, wie Sie es beschreiben, solange das letzte Backup ohne Datumsstempel erstellt wird. Wenn Sie /root/backup.tar.gzzum Beispiel einen Sicherungsprozess erstellen, können Sie die folgende Konfiguration für die Protokollierung verwenden:

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

Der kurze Überblick über die Optionen hier:

  • rotate 5 - Behalten Sie vor dem Löschen 5 Umdrehungen bei
  • nocompress - Komprimieren Sie die Dateien nach dem Drehen nicht
  • dateext - Verwenden Sie das Datum als Rotationserweiterung, anstatt die Zahlen zu erhöhen
  • dateformat _%Y-%m-%d - Legen Sie das Datumserweiterungsformat fest, das Sie verwenden möchten
  • extension .tar.gz- machen Sie das .tar.gzkommen nach der Rotation Verlängerung
  • missingok - Wenn die zu drehende Datei nicht vorhanden ist, machen Sie sich keine Sorgen und fahren Sie fort (standardmäßig wird ein Fehler ausgegeben).

Hoffe das hilft!

Kennzeichen
quelle
1
Gute Arbeit. Ich habe ein paar Dinge gelernt, indem ich das gelesen habe. Ich möchte jedoch hinzufügen, dass einige Distributionen, insbesondere RedHat EL, dazu neigen, Optionen zu entfernen, die nicht "Enterprise Ready" sind, so YMMV.
Zerolagtime
Nach dieser Lösung könnte stackoverflow.com/questions/14858752/… logrotate die Aufgabe erfüllen.
Pieter
22

Sie müssen nicht logrotate verwenden, um es zu tun. Verwenden Sie einfach einen Befehl wie diesen:

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

Dieser Befehl belässt die letzten 5 Dateien und entfernt die verbleibenden (falls vorhanden). Sie können es in einem Cron-Job verwenden.

Khaled
quelle
aber das dreht sich nicht ....
simpleuser
Beantwortet die Frage nicht.
Kubanczyk
4
Die Frage war, fünf aktuelle Backups zu erstellen und genau das zu tun. Noch einfacher: ls -t1 / root / backup_ * | Schwanz -n +6 | xargs rm -f
yoyoma2
Dies beantwortete meine Frage. Leider war die ursprüngliche Frage die nächste, die ich mit Google-Fu finden konnte.
Sukima,
0

Ich hatte gerade die gleiche Situation. Logrotate klingt ziemlich cool, aber es hat bei mir nicht zu 100% funktioniert, weil es nicht mit Daten und Dateinamen übereinstimmt.

Um Verwirrung zu vermeiden, habe ich mich entschlossen, die folgende Zeile einzufügen, die ausgeführt werden soll, nachdem mein aktuelles Backup erstellt wurde, um die letzten 5 Backups zu behalten.

Meine Logs sind zB:

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

Neue Zeile in meinem Backup-Skript (basierend auf einem Kommentar oben)

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

Grüße,

200313
quelle
-1

Sie können es manuell drehen.

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

Jetzt müssen Sie nur noch die Daten in das Protokoll aufnehmen

rotating_logger <file_path> "Welcome world!"
Krrish Krrish
quelle
1
Vielleicht könnten Sie sich ein wenig Mühe geben, um Ihren Beitrag zu formatieren, wenn Sie möchten, dass er nützlich ist.
Tim