lftpを使ってみる
まずは、lftpを手動で使ってみましょう。
以下の例では、
コピー元サーバーは、自サーバー、
コピー先サーバーは、IPアドレス: 111.122.133.144 としています。
$ lftp -u ruser -p 22 sftp://111.122.133.144 -e "mirror -Rev /var/www/html/ /var/www/html/;bye;"
|
上記のコマンドイメージでは、
コピー元サーバー のディレクトリ
/var/www/html/ を
↓
コピー先サーバー(IPアドレス : 111.122.133.144) の
ディレクトリ
/var/www/html/ へコピーします。
コピーするために、sshで
コピー先サーバーへユーザ名:
ruserでログインします。
※
コピー先サーバーには、
ruserというユーザが、既に登録されていなければなりません。
-u : ユーザ名 (ここでは、ruser)
-p : ポート番号 (ここでは、22)
接続先ホスト(URL) (ここでは、sftp://111.122.133.144 )
-e : コマンド指定 (ここでは、mirrorコマンド、bye で終了)
lftp の その他のオプションは、以下のようなものが存在します。
使い方: lftp [OPTS]
`lftp` は rc ファイルを読み込んだあと最初に実行されるコマンドです
-f ファイルで指定されたコマンドを実行し終了する
-c コマンドを実行して終了する
--help このヘルプを表示して終了する
--version lftp のバージョンを表示して終了する
他のオプションは `open' コマンドのものと同じです
-e 選択のすぐあとに指定のコマンドを実行する
-u [,] 認証で指定のユーザ/パスワードを使う
-p 接続に指定のポートを使う
ホスト名、URL あるいはブックマーク名
|
また、mirrorコマンドの使い方は、以下のとおりです。
mirror [OPTS] [source [target]]
|
OPTS : オプション (ここでは、-Rev を指定)
- R:リバースの意味で、アップロードします。Rを指定しない場合はダウンロードしてミラーリングします。
- e:ミラーリング元に存在しないミラーリング先のファイルは削除されます。
- v:処理結果を出力します。0-3まで指定可能で、–verbose=3 などとしています。
上記以外に、以下のようなオプションを使うことができます。
-c, --continue
– 可能な場合同期ジョブを続行する
-e, --delete
– リモートに存在しないファイルを削除する
--delete-first
– 新しいファイルの転送前に古い方のファイルを削除する
--depth-first
– ファイル転送前にディレクトリを辿る
-s, --allow-suid
– リモートサイトに応じて suid/sgid ビットを立てる
--allow-chown
– 所有者と所有グループをセットする
--ascii
– アスキーモードによる転送を用いる(同時に –ignore-size が有効になる)
--ignore-time
– ダウンロードするファイルを時刻によって判断しない
--ignore-size
– ダウンロードするファイルをサイズによって判断しない
--only-missing
– 存在しないファイルのみダウンロードする
--only-existing
– target に存在するファイルのみダウンロードする
-n, --only-newer
– 新しいファイルのみダウンロードする(-c は機能しない)
--no-empty-dirs
– 空のディレクトリを作成しない(–depth-first が有効になる)
-r, --no-recursion
– サブディレクトリを辿らない
--no-symlinks
– シンボリックリンクを作成しない
-p, --no-perms
– ファイルのパーミッションを設定しない
--no-umask
– ファイルモードに umask を適用しない
-R, --reverse
– 逆の同期(ファイルをアップロードする)
-L, --dereference
– シンボリックリンクをファイルとしてダウンロードする
-N, --newer-than=SPEC
– 指定された時間よりも新しいファイルのみダウンロードする
--on-change=CMD
– ファイル変更があった場合に指定されたコマンドを実行する
--older-than=SPEC
– 指定された時間よりも古いファイルのみダウンロードする
--size-range=RANGE
– 指定されたサイズに含まれるファイルのみダウンロードする
-P, --parallel[=N]
– N 個のファイルを並行してダウンロードする
--use-pget[-n=N]
– それぞれのファイルの転送に pget を用いる
--loop
– 変更が見付からなくなるまでループする
-i RX, --include RX
– 操作対象のファイルを正規表現で指定する
-x RX, --exclude RX
– 操作対象外のファイルを正規表現で指定する
-I GP, --include-glob GP
– 操作対象のファイルをグロブパターンで指定する
-X GP, --exclude-glob GP
– 操作対象外のファイルをグロブパターンで指定する
-v, --verbose[=level]
– 冗長な出力を行う
--log=FILE
– 実行されるコマンドを FILE に書き込む
--script=FILE
– 実行されるコマンドを FILE に書き込むが、実際には実行しない
--just-print, --dry-run
–script=- と同じ
--use-cache
– キャッシュされたディレクトリ一覧を使用する
--Remove-source-files
– 転送後にファイルを削除する(注意して使用すること)
-a
– –allow-chown –allow-suid –no-umask と同じ
この後、パスワード確認があるので、パスワードを入力し、処理を続行します。
$ lftp -u ruser -p 22 sftp://111.122.133.144 -e "mirror -Rev /var/www/html/ /var/www/html/;bye;"
パスワード:
Transferring file `test.txt'
合計: 1 個のディレクトリ、1 個のファイル、0 個のシンボリックリンク
新規: 1 個のファイル、0 個のシンボリックリンク
$
|
パスワード:は、ruserのパスワードを入力しリターンします。
ログインできれば、ファイルの同期が実施されます。
最初は、ファイル数にもよりますが、多少時間がかかります。
2回目以降は、新規作成、更新、削除したファイルのみが制御されますので、通常は、すぐに終わります。
通常、SSH接続時は、RSA key と接続先ホストの確認が出力されますが、lftpでは、確認メッセージはありません。
~/.ssh/known_hosts に自動的にRSA Keyは保存されます。
lftpを使って自動で同期をとるようにする
ここまでで、lftpを手入力することで、ファイルの同期をとることができました。
続けて、これを自動化しようと思います。
自動化といえば、cronですね、
ただ、cronを使うには、パスワード入力などのコンソールにおける対話をなしにする必要がありますね。
以前に rsync + ssh でファイルの同期をとる にて rsync + ssh を利用してファイルの同期をとる 方法について簡単に解説しました。
rsync + ssh を用いる場合、
sshでは、rsaを使った公開キーファイル、秘密キーファイルを元にログインを自動化する必要がありました。
今回の lftp + sftp(ssh) では、sshがパスワードのみでログイン可能となっている場合は、パスワードを指定することで、
簡単に自動化を行うことができます。
以下のように cron に指定する際に、パスワードを指定するだけです。
最後に、コピー元サーバーでcronに登録して完了です。
$ crontab -e
*/5 * * * * lftp -u ruser,ruser-password -p 22 sftp://111.122.133.144 -e "mirror -Rev /var/www/html/ /var/www/html/;bye;" > /var/log/lftp 2>&1
|
ここで追加したのは、パスワードのみです。(上記の例では、,ruser-password 部分になります )
カンマを忘れないようにしましょう。
ruser-password は、ruserのパスワードになります。
この例では、5分間隔で同期をとるようにしています。
また、複数のサーバーと同期をとりたい場合は、ここまでの手順と同じようにユーザの設定を行い、ここのcronの設定にサーバー分列挙することになります。
ざっとこんな感じです。
rsync + ssh でファイルの同期をとる にて rsync + ssh を利用してファイルの同期をとる 方法について以前に解説しましたが、
lftp との違いがわかりましたでしょうか?
rsyncを利用したことがある方からすれば、lftpは、非常に便利に感じるかもしれません。また、簡単でわかりやすいとも思います。
転送方法に差がありますから、一般的にはrsyncが効率的といわれていますが、それも場合によっては逆の場合もあります。
いずれにしてもファイルの同期設定を行っておくと、サーバーの分散化が楽になるのは間違いありません。
まずは、お試しあれ。
コメントを投稿 :