Aktualizuj crontab, aby tarował nowe / zaktualizowane pliki co 5 godzin

Nov 30 2020

Próbuję utworzyć polecenie dla crontab, aby tarował wszystkie nowe / zaktualizowane pliki (od ostatniego uruchomienia crona). Cron musi działać co 5 godzin.

  1. Chcę wykonać kopię zapasową wszystkich plików zawartych w folderze, w /home/swayrainestym jego podfolderu
  2. Chcę tutaj zapisać plik tar z tymi plikami folder/backup/back.tar
  3. Plik crontab musi być uruchamiany co 5 godzin
  4. Do archiwum należy dodać tylko te pliki, które zostały dodane lub edytowane od czasu ostatniego uruchomienia crona. Więc jeśli nie jest nowy / edytowany, nie powinien być zapisywany.
  5. Chcę zapisać wynik w dzienniku z zarówno stdout, jak i stderr tutaj folder/backup/backlog.log

Pomyślałem więc, że najlepszym sposobem na kontynuację jest finddodanie / edytowanie plików w ciągu ostatnich 5 godzin, a następnie tartych plików, przed wyprowadzeniem stdout i stderr w .log, ale to nie działa i nie jestem pewien, co jest nie tak.

Oto jak to wygląda do tej pory (zaktualizowane, aby uwzględnić częściową odpowiedź):

  0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;

update Problem polega na tym, że teraz tworzy nowe archiwum tar za każdym razem, gdy crontab jest uruchamiany, a archiwum zawiera tylko ostatnio dodany plik.

aktualizacja 2 Dla jasności, na początku stwierdziłem, że chcę tworzyć nowe archiwum co 5 godzin, ale raczej chcę aktualizować archiwum i dołączać tylko nowe pliki. Więc uważam, że muszę zmienić polecenie tar na -uvf?

Odpowiedzi

1 Lee3 Dec 01 2020 at 04:27

Użyj podpisanych liczb jako argumentu. 300 oznacza zmodyfikowane dokładnie 300 minut temu. -300 to mniej niż 300 minut temu. +300 oznaczałoby więcej niż 300 minut temu.

AKTUALIZACJA 1

Argument, który -execma kończyć się na \;, na przykład:

 0 */5 * * * find /home/swayraines -mmin -300 -exec tar -zcvf folder/backup/back.tar {} > /folder/backup/backlog.log 2>&1 \;

Będzie to działać bez problemu, ale ponieważ wykonuje polecenie na 1 pliku na raz, skończysz z tylko ostatnim plikiem, na którym działa, skompresowanym do pliku tar . Proponuję napisać polecenie skopiowania plików do katalogu tymczasowego, skompresować katalog tymczasowy, a następnie usunąć katalog tymczasowy.

AKTUALIZACJA 2

Poprawny. Możesz użyć -r --appendlub, -u --updatejeśli chcesz dołączyć zmienione pliki na koniec pliku tar , ale plik tar będzie musiał zostać utworzony jako pierwszy. Nie utworzy pliku, jeśli nie istnieje. Ważne jest, aby pamiętać, że te polecenia nie zastępują poprzedniej wersji, dlatego jeśli nie potrzebujesz obu wersji, powinieneś --deletenajpierw użyć, a następnie dołączyć nową wersję.

Pamiętaj też, że nie będzie to skompresowany plik tar . Nie można aktualizować skompresowanych plików tar bez rozpakowywania / ponownego kompresowania. Dlatego nie można łączyć opcji -zi -ur.