Aktualisieren Sie eine Crontab, um alle 5 Stunden neue / aktualisierte Dateien zu tarieren
Ich versuche, einen Befehl für eine Crontab zu erstellen, um alle neuen / aktualisierten Dateien zu tarieren (ab dem Zeitpunkt, zu dem die Cron zuletzt ausgeführt wurde). Der Cron muss alle 5 Stunden laufen.
- Ich möchte alle im Ordner enthaltenen Dateien
/home/swayraines
einschließlich seines Unterordners sichern - Ich möchte hier einen Teer mit diesen Dateien speichern
folder/backup/back.tar
- Die Crontab muss alle 5 Stunden laufen
- Dem Archiv müssen nur die Dateien hinzugefügt werden, die seit der letzten Ausführung des Cron hinzugefügt oder bearbeitet wurden . Es sollte also nicht gespeichert werden, es sei denn, es ist neu / bearbeitet.
- Ich möchte das Ergebnis hier in einem Protokoll mit stdout und stderr speichern
folder/backup/backlog.log
Daher dachte ich, der beste Weg, um fortzufahren, besteht darin, find
die in den letzten 5 Stunden hinzugefügten / bearbeiteten Dateien und dann tar
diese Dateien zu verwenden, bevor stdout und stderr in einem .log ausgegeben werden, aber es funktioniert nicht und ich bin mir nicht sicher, was falsch ist.
So sieht es bisher aus (aktualisiert, um eine Teilantwort aufzunehmen):
0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;
update Das Problem ist, dass derzeit jedes Mal, wenn die crontab ausgeführt wird, ein neues tar-Archiv erstellt wird und das Archiv nur die zuletzt hinzugefügte Datei enthält.
Update 2 Um ganz klar zu sein, habe ich zunächst angegeben, dass ich alle 5 Stunden ein neues Archiv erstellen möchte, sondern das Archiv aktualisieren und nur die neuen Dateien anhängen möchte. Ich glaube also, ich muss den Befehl tar in ändern -uvf
?
Antworten
Verwenden Sie für das Argument vorzeichenbehaftete Zahlen. 300 bedeutet genau vor 300 Minuten geändert . -300 ist weniger als 300 Minuten her. +300 wäre mehr als 300 Minuten her.
UPDATE 1
Das Argument, mit dem -exec
man enden muss, lautet \;
wie folgt:
0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;
Dies wird problemlos ausgeführt, aber da der Befehl jeweils für 1 Datei ausgeführt wird, wird nur die letzte Datei angezeigt, mit der er in die TAR- Datei komprimiert ist . Ich schlage vor, Sie schreiben den Befehl, um die Dateien in ein temporäres Verzeichnis zu kopieren, das temporäre Verzeichnis zu komprimieren und dann das temporäre Verzeichnis zu entfernen.
UPDATE 2
Richtig. Sie können -r --append
oder -u --update
wenn Sie geänderte Dateien an das Ende der TAR- Datei anhängen möchten , aber die TAR- Datei muss zuerst erstellt werden. Die Datei wird nicht erstellt, wenn sie nicht vorhanden ist. Es ist wichtig zu beachten, dass diese Befehle die vorherige Version nicht überschreiben. Wenn Sie nicht beide Versionen benötigen, sollten Sie diese --delete
zuerst verwenden und dann die neue Version anhängen.
Beachten Sie außerdem, dass dies keine komprimierte TAR- Datei ist. Sie können komprimierte TAR- Dateien nicht aktualisieren , ohne sie erneut zu komprimieren. Aus diesem Grund können Sie die Optionen -z
und nicht kombinieren -ur
.