crontabを更新して、5時間ごとに新しい/更新されたファイルをtarします

Nov 30 2020

(cronが最後に実行されたときから)すべての新規/更新されたファイルをtarするためのcrontabのコマンドを作成しようとしています。cronは5時間ごとに実行する必要があります。

  1. /home/swayrainesサブフォルダを含むフォルダに含まれるすべてのファイルをバックアップしたい
  2. これらのファイルと一緒にtarをここに保存したい folder/backup/back.tar
  3. crontabは5時間ごとに実行する必要があります
  4. アーカイブに追加する必要があるのは、cronが最後に実行されてから追加または編集たファイルのみです。したがって、新規/編集されていない限り、保存しないでください。
  5. ここにstdoutとstderrの両方を含むログに結果を保存したい folder/backup/backlog.log

したがって、先に進む最善の方法findは、過去5時間に追加/編集されたtarファイル、次にそれらのファイルを実行してから、.logにstdoutとstderrを出力することだと思いましたが、機能せず、何が問題なのかわかりません。

これまでのところ、次のようになります(部分的な回答を含むように更新されました)。

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

update問題は、現在、crontabが実行されるたびに新しいtarアーカイブが作成され、アーカイブには追加された最新のファイルしか含まれていないことです。

update 2明確にするために、最初は5時間ごとに新しいアーカイブを作成したいのですが、アーカイブを更新して新しいファイルのみを追加したいと述べました。だから私はtarコマンドを-uvf?に変更する必要があると信じています

回答

1 Lee3 Dec 01 2020 at 04:27

引数に符号付き数値を使用ます。300は、正確に300分前に変更されたことを意味します。-300は300分未満前です。300は次のようになり、より約300分前。

更新1

の引数-exec\;、次のようにで終わる必要があります。

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

これは問題なく実行されますが、一度に1つのファイルに対してコマンドを実行するため、tarファイルに圧縮されて動作する最後のファイルのみが表示されます。ファイルを一時ディレクトリにコピーし、一時ディレクトリを圧縮してから、一時ディレクトリを削除するコマンドを作成することをお勧めします。

更新2

正しい。-r --appendまたはを使用-u --updateして、変更されたファイルをtarファイルの最後に追加することができますが、tarファイルを最初に作成する必要があります。ファイルが存在しない場合、ファイルは作成されません。これらのコマンドは以前のバージョンを上書きしないことに注意することが重要です。したがって、両方のバージョンが必要ない場合は、--delete最初に使用してから新しいバージョンを追加する必要があります。

また、これは圧縮されたtarファイルではないことに注意してください。圧縮解除/再圧縮せずに圧縮されたtarファイルを更新することはできません。そのため、-z-urオプションを組み合わせることはできません。