読者です 読者をやめる 読者になる 読者になる

#rsyncを試してみた

こんにちわ、95(くごー)です(^o^) 最近は「おにやんま」という、うどん屋に頻繁に行ってます。全然グルメではありませんが麺が最高に美味しいです!機会があれば是非食べてみてください。
さて今回の記事ですが、rsyncコマンドを試したいと思います。経緯としては、弊社プロダクトでバージョン管理下でない複数台のサーバーに手作業でファイルを更新した際に、rsyncコマンドで出来ないのかなと思い今回の記事にしました。

rsyncとは

rsyncコマンドは、リモート、ローカルにかかわらずディレクトリやファイルを高速にコピーするコマンドです。ローカルとリモート間のディレクトリ同期やバックアップによく使われます。

対象

例えば、バージョン管理下のファイルはJenkinsなどを使用して複数台のサーバーにデプロイができます。しかし、バージョン管理下でないファイルは手作業で行うなど手間がかかります。そこでrsyncコマンドでサーバーにファイルを転送したい方を対象にしてます。

今回やること

今回はサーバーAとサーバーB、2台のサーバーを例にrsyncコマンドで以下3つを試します。
1. サーバーA内のファイルをサーバーBに転送する。
2. サーバーAで転送したファイルの中身を変更して再度サーバーBに転送する。
3. サーバーAでファイルを削除してサーバーBに転送する。

環境

CentOS 6.6
サーバー2台

サーバーへの認証を行うための設定

鍵認証ができるように設定します。

コマンド実行

サーバーAは以下のディレクトリです。
f:id:kugor9595:20150731142712p:plain

サーバーBは以下のディレクトリです。
f:id:kugor9595:20150731142737p:plain

転送するaaa.txtです。

#aaa.txt  
hoge

1. サーバーA内のファイルをサーバーBに転送する。

さてまずサーバーA内のファイルをサーバーBにファイルを転送します。「"ssh -i [秘密鍵のパス]"」の部分は秘密鍵を使う場合のオプションです。

$ rsync -avz -r --update -e "ssh -i [秘密鍵のパス]" /test/aaa.txt [remoteuser@hostname]:/test/

サーバーBにファイルが確認できました。

$ cd /test  
$ ls
aaa.txt

2. サーバーAで転送したファイルの中身を変更して再度サーバーBに転送する。

次にサーバーAで転送したaaa.txtの中身を変更して再度サーバーBに転送します。

$ echo "hogehoge" > aaa.txt
$ rsync -avz -r --update -e "ssh -i [秘密鍵のパス]" /test/aaa.txt [remoteuser@hostname]:/test/aaa.txt

サーバーBのファイルに変更されたのが確認できました。

$ cd /test  
$ cat aaa.txt
hogehoge

3. サーバーAでファイルを削除してサーバーBに転送する。

最後にサーバーAでファイルを削除して以下を実行します。 

$ rsync -avz -r --update --update -e "ssh -i [秘密鍵のパス]" /test/aaa.txt [remoteuser@hostname]:/test/aaa.txt

サーバーBもファイルが削除されました。

$ cd /test  
$ ls

まとめ

今回はrsyncコマンドを試してみました。感想としては転送元のパスの末尾を/があるかないかで怖いことが起きそうだなと思いました。例えば「1. サーバーA内のファイルをサーバーBに転送する」で転送元のパスの末尾の/をなくしたとき、転送先の/test以下に転送元のtestフォルダを転送するということになります。実行するときは気を付けなければいけませんね。ただしっかり理解した上で実行すれば簡単にできそうなので、業務でも使用したいと思います。また今回は紹介していませんがオプションも色々あるので次回以降紹介していけたらなと。気になる方はこちらから。今日もおにやんまに行ってヒデコDX冷を食べてきます!でわでわ。