セキュリティの関係で WEBサーバーとWEBサーバーからしかアクセスできないDBサーバーの構成で・・・
一部プログラムをDBサーバー側に置く必要があるがDBサーバーには直でつなげないから
WEBサーバーに一度アップしてsftpでコマンド毎回たたいて送ってたけどメンドいのでlftpを使ってみた。
lftpのmirrorを使って完成~♪
#!/bin/sh
LOCAL_DIRNAME=$1
REMOTE_DIRNAME=$2
USERID=$3
PASSWAD=$4
FTPSITE=$5
if [ -d $LOCAL_DIRNAME ]
then
lftp <<- END
open -u $USERID,$PASSWAD $FTPSITE
lcd $LOCAL_DIRNAME
cd /$REMOTE_DIRNAME
mirror -Rv
END
else
echo "No such directry."
fi
けどなぜか転送できていないケースがある。
毎回じゃなくて短いスパンで何度も更新してると効かないことがある。
短いスパン+ファイルサイズが変更されていない場合に起きるみたい。
更新された、、、って判定条件がタイムスタンプとファイルサイズの両者なのかな?
ってことで--ignore_sizeオプションを入れるも変化なし。。。
なんでやねん?
っていろいろ調べた末 どうもタイムスタンプが悪さをしているみたい
ようは新しいかどうかローカルとリモートでタイムスタンプ比較しているわけだけど
比較の際にローカル時刻とGMTの時刻を比較してたみたい。
以下を追加したら無事毎回転送されるようになりました。
set ftp:use-mdtm no
set ftp:timezone -9
これ、lftpのバグって言ってもいいレベルじゃない?
結局2時間ぐらい悩んだわけだけど だったら自分でファイル転送プログラム書いた方が速かった気がするw
まぁ次回から役に立つわけでよかったけれど・・・
ちなみにlftpでmirrorするのは今回が2回目なんだけど 前回はこんなオプション入れていないから・・・
こっそりなおしておきました。
まぁ前回はバックアップ目的だったから実行が1日1回とかだから上のバグ条件に当てはまるケースはあまり多くはなかったとは思いますけどね。