Ich habe versucht, mit logrotate eine Datenbanksicherung zu speichern für:
- letzte 7 Tage (täglich)
- letzte 4 Wochen (wöchentlich)
- letzte 12 Monate (monatlich)
Ich habe ein Logrotate-Skript wie dieses erstellt, aber nur die täglichen Rotationen werden ausgeführt.
Was fehlt mir oder mache ich falsch? Bricht das Datumsformat * ' wöchentlich ' * das Skript? Wenn ja, wie kann ein eindeutiger Name für jeden gedrehten Dateityp festgelegt werden? Zum Beispiel mit 'extension .week' ?
Hinweis: Ich habe die Vor- und Nachrotation bei wöchentlichen und monatlichen Rotationen verwendet, um eine Dummy-Datei zu erstellen, um zu überprüfen, ob diese ausgeführt werden, aber die Dateien werden nie erstellt.
Hinweis 2: Die Datei /backups/db.sql wird korrekt erstellt
#daily (son)
"/backups/db.sql" {
daily
rotate 7
missingok
copy
compress
}
#weekly (father)
"/backups/db.sql" {
weekly
rotate 4
missingok
copy
dateext
dateformat _weekly_%Y-%m-%d.
compress
prerotate
touch /backups/weekly_pre.txt
endscript
postrotate
touch /backups/weekly_post.txt
endscript
}
#monthly (grandfather)
"/backups/db.sql" {
monthly
rotate 12
missingok
copy
dateformat _monthly_%Y-%m-%d.
compress
prerotate
touch /backups/monthly_pre.txt
endscript
postrotate
touch /backups/monthly_post.txt
endscript
}
Wenn ich logrotate manuell mit ausführe
logrotate -d /path/to/logrotate_job
Ich bekomme
# logrotate -d /path/to/logrotate_job
reading config file logrotate_job
reading config info for "/backups/db.sql"
error: db_backup:11 duplicate log entry for /backups/db.sql
error: found error in "/backups/db.sql" , skipping
removing last 1 log configs
Handling 2 logs
rotating pattern: "/backups/db.sql" after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /backups/db.sql
log does not need rotating
rotating pattern: "/backups/db.sql" 1048576 bytes (no old logs will be kept)
empty log files are rotated, old logs are removed
Es scheint, dass dieselbe Datei nicht gedreht werden kann. Wie kann also die tägliche Datei gedreht werden, wenn ihr Name das Datum enthält?
Der Versuch, eine wöchentliche Aufgabe einzustellen:
kein Datum
prerotate cp dailyrotated to dailyrotated.week
Und monatlich einstellen
kein Datum
prerotate cp weekrotated to weekrotated.month
weekly
Abschnitt auf eingestelltdaily
.Antworten:
Ich bin gerade auf dieses Problem gestoßen und habe diesen Thread gelesen.
Während meiner Recherche habe ich einen anderen Weg gefunden, um das Problem des doppelten Pfads in der logrotate-Konfigurationsdatei zu lösen:
Das Erstellen symbolischer Links ist weniger schmerzhaft und führt den logrotate Parser perfekt aus, indem Sie ihm verschiedene Pfade für den Zugriff auf dieselben Dateien präsentieren.
Im Dateisystem:
In der logrotate conf-Datei:
quelle
Das Problem ist, dass Sie in jedem Eintrag denselben Protokolldateinamen verwenden.
Eine wöchentliche Rotation erfolgt, wenn mehr als eine Woche seit dem letzten Rotieren der Protokolldatei vergangen ist. Da die Datei jeden Tag gedreht wird, gelangen Sie nie zum wöchentlichen Lauf. (Aus dem gleichen Grund wirst du auch nie zum monatlichen Lauf kommen.)
Um die wöchentlichen und monatlichen Sicherungen beizubehalten, müssen Sie den Dateinamen ändern, bevor Sie die Protokollierung ausführen. Am einfachsten wäre es, einen separaten Cron-Job zu erstellen
db.sql
, derdb.sql.weekly
einmal pro Woche unddb.sql.monthly
einmal pro Monat kopiert wird . Wenn Sie dies getan haben, können Sie Ihre logrotate-Konfiguration in "Lesen" ändernquelle
Ich denke, Ihre Zieldateien sollten sowohl wöchentlich als auch monatlich einen anderen Namen haben. Wenn Sie sich die Statusdatei ansehen, werden Zielname + Datum gespeichert, damit sie weiß, wann das Ziel zuletzt ausgeführt wurde.
Es ist ein Protokollrotationssystem, nicht wirklich ein Sicherungssystem.
Ich würde eine andere Strategie empfehlen. und benutze so etwas wie rsnapshot, das so etwas machen soll.
Es kann hilfreich sein, logrotate mit der Option -d auszuführen, um zu sehen, welche Entscheidungen es trifft.
Alternativ können Sie ein anderes Ziel verwenden
Sie möchten jedoch, dass der Monat vor dem Wöchentlichen und der Monat vor dem Täglichen ausgeführt wird (rsnapshot ist in rsnapshot integriert).
quelle