サーバーの機能や権限などの問題で 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
ログの出力先のファイルを指定します
コメント