lftpのスクリプト

シェルスクリプトを使って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

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA