ネットワーク接続時にrsyncを実行する

ネットワーク接続時にrsyncを実行する

私は常にオンになっているメインのコンピュータである Mac を 1 台持っています。また、MacBook も持っていて、iPhoto ライブラリを同期しようとしています。そのため、rsync を使用してファイルを同期できます。1 日に 1 回実行するように cron を使用しています。

実際には、MacBook は常にオンになっているわけではないので、2 台のコンピューターが同じ Wi-Fi ネットワークに接続されているときに rsync を実行する方法を探しています。したがって、空港が接続されているときに何らかの方法で rsync を実行するのが最適だと思います。最適な方法は何ですか?

答え1

rsync は変更が必要な部分のみを変更するので、cron ジョブを 1 時間に 1 回実行するだけでも問題ありません。コピーするものがほとんどないかまったくない場合は、ほとんど時間がかかりません。ただし、ジョブが試行中にハングアップするのは望ましくないため、MacBook が起動しているかどうかをチェックする小さなシェル スクリプトを作成し、起動している場合は rsync コマンドを実行するようにすることができます。問題が発生して rsync ジョブがハングアップしたり、1 時間以上かかったりした場合に備えて、前のインスタンスがまだ実行されているときに新しいインスタンスを開始しないようにする必要があります。サンプル スクリプトを以下に示します (MyRsyncJob という名前で、修正する必要があります)。

[ -s /var/run/MyRsyncJob ] && {
  PID=$(cat /var/run/MyRsyncJob)
  echo "MyRsyncJob is still running (PID $PID)" >&2
  exit 1
}
ping  -c 1 -o MacBook >&- || exit 1 # Exit if MacBook isn't reachable
trap 'rm /var/run/MyRsyncJob' 0 15 # Remove run file upon exit or TERM signal
echo $$ >> /var/run/MyRsyncJob     # Put PID into run file
rsync -zave ssh /path/to/my/iphoto/library/ MacBook:/path/to/destination/directory

それが役に立つことを願います。

関連情報