LFTPでサーバ間ディレクトリを同期する方法

サーバーの機能や権限などの問題で rsync + ssh が利用出来ないサーバーのディレクトリを同期したい場合に代替えの方法として lftp を使う方法があります。

lftpのmirrorを使った同期スクリプト

同期スクリプト

#!/bin/bash

REMOTE_SRV='ftp://IPアドレス Or ホスト名'
USER='ユーザID'
PASS='パスワード'

REMOTE_DIR='/www/htdocs/'
LOCAL_DIR='/home/サーバーID/htdocs/'
LOCAL_LOG='/home/サーバーID/lftp.log'

/usr/bin/lftp <<EOF

set ssl:verify-certificate no
open -u ${USER},${PASS} ${REMOTE_SRV}
#mirror --dry-run --delete --parallel=4 --only-newer --log=${LOCAL_LOG} ${REMOTE_DIR} ${LOCAL_DIR}
mirror --delete --parallel=4 --only-newer --log=${LOCAL_LOG} ${REMOTE_DIR} ${LOCAL_DIR}
echo end
close

quit
EOF

実行コマンド

下記コマンドを必要なときに手動実行や cron で定期実行するようにします。

$ /bin/bash lftp.sh

実行後エラーが出る場合

コマンド実行後「mirror: 致命的エラー: Certificate verification: Not trusted」が出る場合は、接続前に下記の一行を追加してSSL証明書の正当性確認を無効にしてエラーを回避します。

set ssl:verify-certificate no

※あまり良い方法ではないと思いますので、別の回避方法を調査しようと思います

lftp mirroコマンドのオプション

同期スクリプト内で利用しているオプション内容

–dry-run

「–dry-run」でテスト実行し事前に動作確認を行います。

–delete

「–delete」を指定することでリモートサーバーにないファイルはローカルで削除します。

–parallel=n

複数ファイルの操作を同時に行うよう指定します。「n」に指定する数値で同時に行うファイル数を指定します。

–only-newer

更新時刻が新しい場合にファイル転送します。

–log=FILE

ログの出力先のファイルを指定します

コメント

タイトルとURLをコピーしました