サーバAとサーバBで、rsyncで同期を取るプロジェクトにて、
サーバA側のファイルのタイムスタンプが更新されてしまい、
同期対象おかしくなってしまったので、その対応方法。
今後もしかしてたら必要になるかもしれないのでメモ。
気にせずrsyncをとればよいのですが、
それもできない状態だったので、以下の様な対応をしました。
サーバAのタイムスタンプ 1> サーバBのタイムスタンプ
になっているため、rsyncで同期対象となっている。
rsyncのドライランで、同期対象となっているものすべてのファイルを取得。
ファイル一覧を生成。
次にサーバA、サーバB両方にあるものを取得し、かつ、サーバB側のタイムスタンプも取得。
単純にshell組んで、実行するだけです。標準出力のみリダイレクトします。
サーバAにあって、サーバBにないものはエラーに出力されるので無視。
ssh サーバB ls -la --time-style=+"%Y%m%d%H%M.%S" ファイルパス
下記にて、サーバAとサーバB両方にあるもので、ファイル内容に差分があるものは対象外とする
簡単に、以下のような内容を実行するシェルを作りました。
こんなことしなくても、rsyncでCオプション使えばよいのかもしれませんが、
未検証だったので。
scp /tmp/ファイルパス サーバB:ファイルパス diff /tmp/ファイルパス ファイルパス rm /tmp/ファイルパス
できたリストと、先にとっておいたタイムスタンプを使って、
サーバA側のタイムスタンプを更新する。
sudo touch -t タイムスタンプ ファイルパス
以上で終了。