シェルスクリプトを使ってlftpで定期的にミラーリングするスクリプト。
#!/bin/sh
logdir=lftplogs
while :
do
rm -f tmp.log
logfile=$logdir/lftp.`/bin/date +%y%m%d_%H%M%S`.log
touch $logfile
echo "Script starting on "`date` >> $logfile
lftp sftp://user:@host >> $logfile 2>&1 << EOF
mirror --parallel=2 -v --log=tmp.log /path_to_source/ /path_to_dest
EOF
cat tmp.log >> $logfile
rm -f tmp.log
echo "Script ending on "`date` >> $logfile
sleep 7200
done
- sshの秘密鍵・公開鍵認証、公開鍵のエージェント転送の設定を済ませておくことでパスワード入力なしでミラーリングすることができる。
- whileの無限ループとsleepをかけることで、定期的にバックアップする。
- 同様のことはcrontabでもできるが、crontabで設定すると前のプロセス終了前に重複して実行される可能性があるので、この方法を使っている。
ヒアドキュメントにシェル変数を使ったスクリプト
上記のスクリプトを毎回編集するのが面倒なため、ヒアドキュメント内でシェル変数を展開するように書き換えた。無限ループは使わない場合が多いので削除した。
#!/bin/sh
logdir=./
username=user
hostname=host
srcdir=srcdir
logfile=$logdir/lftp.`/bin/date +%y%m%d_%H%M%S`.log
touch $logfile
echo "Script starting on "`date` >> $logfile
lftp sftp://${username}:@${hostname} >> ${logfile} 2>&1 << EOF
cd ${srcdir}
mirror --use-pget -v --log=${logfile} -I <wildcard pattern> ./
EOF
echo "Script ending on "`date` >> $logfile
ファイルリスト一覧をテキストファイルから読ませてコピー
#!/bin/sh
logdir=./
flist="flist.txt"
username=hogehoge
hostname=hoge.hogehoge.com
srcdir=/home/hogehoge
flist="flist.txt"
function get_ftarget(){
ftarget=""
if [ -f ${flist} ]; then
while read line
do
ftarget="${ftarget} ${line}"
done < $flist
fi
}
get_ftarget
echo $ftarget
logfile=$logdir/lftp.`/bin/date +%y%m%d_%H%M%S`.log
lftp sftp://${username}:@${hostname} >> ${logfile} 2>&1 << EOF
set xfer:log-file ${logfile}
set xfer:log yes
cd ${srcdir}
mget ${ftarget}
EOF
exit