rsyncとcronで定期的にデータを同期する仕組みをざっくりと。
プロダクションサーバーのバックアップデータを、 ステージングサイトへと同期させたり、ユーザーが上げたデータを別サーバーでも使いたい等、linux環境からlinux環境へとデータを定期的に同期させたいときに使用する。
鍵の作成とログイン
まずパスフレーズなしの鍵を作成してログインできるようにする。
データを渡す側に秘密鍵を持たせる。
同期でデータを受け取る側に公開鍵を渡して登録する。
秘密鍵を指定してパスワードなしでログインできるかを確認。
この辺り以前にssh-keygenで鍵作成し、sshでログインできるようにする。に書いたのでそちらを参照。
(ちなみに、rsyncをデータを受け取る側で動かしたい場合は、秘密鍵と公開鍵の持ち方は逆になる。)
rsyncを試す
次に、rsyncを実行してみる。
下記のように記述する。
rsync -av -e "ssh -i /home/gomokuro/keys/id_rsa_for_rsync" ~/moge/ gomokuro@gomokuro.net:moge
パスフレーズなしの秘密鍵をid_rsa_for_rsyncとして作ったとして、ホームのmogeディレクトリを、リモート先のホームディレクトリ(例ではgomokuro.netのgomokuroというユーザーのホームディレクトリ)のmogeに同期させる場合の書き方。
注意点として、コピー元を~/mogeと末尾のスラッシュを取ると、~/moge/moge/各ファイル と保存させる。
なので、ローカルを~/moge 、リモートを~/ の組み合わせでもよい。
-aとオプションをつけておけばとりあえずよくある系のオプションになる。
-vは、コピーの経過が見れるので、手動でやる場合はとりあえずつけておくべき。
-eは、接続に使うシェル名:デフォルトだとsshなので使うことはないが、今回のように秘密鍵を独自にしたり、sshのポート番号を変えてる場合などに使う。
注意点は、秘密鍵を任意で指定する場合に、-e オプション以降にsshコマンドとして記述するが、ここがフルパスでないと鍵を読めない。
cronで自動実行
最後にcronに自動実行させる。
crontab -e
で、cron編集ファイルを開き、下記のように書く。
35 * * * * rsync -av -e "ssh -i /home/gomokuro/keys/id_rsa_for_gomokuro" ~/moge/ gomokuro@gomokuro.net:moge
設定項目は左から「分」「時」「日」「月」「曜日」 コマンド となっている。
上の例だと、毎時35分になったら実行する。
また、カンマ区切りで並べたり、ハイフンで1-6などとつないだり、*/5を分フィールドに指定して5分おきなどと書ける。
とりあえず、目先の分数に指定して同期されるかをみて、細かい設定を行う。
これで、自動で任意のサーバーのディレクトリを任意のサーバーのディレクトリと同期させれる。