こんにちは、私は2台のLinuxマシンを持っています。サーバーA(LUbuntu)とサーバーB(Raspbian)。私がやりたいことは、サーバーAがサーバーBの特定のディレクトリ(AにマウントされているNFS)を確認し、ファイルがある場合はサーバーAの場所に転送することです。理想的には、Bに転送されたすべてのファイルは転送後に削除されます。私はAとBを同期させたくありません。また、理想的には重複したファイルを転送したくなく、削除するだけです。
あまりにも多くのスクリプトなしでこれを達成するための最良の方法は何ですか? Aは常にオンラインではないため、ファイル転送を再開することが重要です。
これを行うことができる既存のソフトウェアはありますか?それとも、すべてのスクリプトを自分で書く必要がありますか?
ありがとう
答え1
この方式の基本的な欠陥は、ホストBがいつファイルをコピーするのが安全であるかを知ることができないことです。ホストAがNFS共有にファイルを書き込んでいて、ホストBが完全に書き込む前にファイルをインポートする場合はどうなりますか?ホストBはファイルの一部をコピーし(部分)、コピーが成功するとファイルを削除する。みんなホストAが書き込みを完了していないため、コピーされていない部分を含むファイル。
つまり、これはとても簡単なようですrsync
。man
ページ、特に--partial
オプション、おそらく--checksum
オプションをお読みください。特にその部分に関する警告 --remove-source-files
オプション。*.new
ホストAがホストBがコピーするファイルを作成してからファイル名を.new
元に変更した場合など、ファイル名を使用して提案された解決策が有効になることがあります。単一のファイルシステム内で名前を変更するのは通常アトミックな操作であるため、ホストBは忍耐を持ち、すべての* .newファイルを無視する必要があります。名前が変更されると、ホストBはcron
次にジョブが実行されるとそれを送信します。
答え2
私が提案するスナップ写真。
これはデフォルトのPerlスクリプトです。スクリプトはすでに完了しています。/usr/local/etc/rsnapshot.conf
ファイルを編集して指定します。源泉そして目的地コピー用。
だからあなたは走る/usr/local/bin/rsnapshot
実行可能ファイルが配置されたと思われる場所
自動実行:crontab -e
次の操作を行います。
0 12 * * * /usr/local/bin/rsnapshot daily
crontabの構文は次のとおりです。
minute hour day_of_month month day_of_week
私のcrontab構文によると、指定された内容は毎日午後12時に実行されます。
0 22 * * 2 /usr/local/bin/rnsapshot daily # will run at 8:00pm only every Monday
rsnapshot Perlスクリプトの毎日の入力パラメータのrsnapshotの説明を読んでください。
rsnapshotは、必要なものをすべて設定したら、何でもコピーできます。 [説明に記載]