Lftp+Sftp传输总结

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Lftp+Sftp传输总结相关的知识,希望对你有一定的参考价值。

背景介绍:
因为备份数据的不断扩大,需要把现网备份的数据(2T左右)传回到本地进行异地保存。但是2T太大了,需要进行压缩,这里采用了3G一个压缩包的方式。以下是压缩脚本

#!/bin/bash
# 此脚本是全量压缩mongodb备份的文件
printf "开始mongodb备份压缩    $(date  +%Y%m%d_%A_%Z%T)\n"
cd /data_master/backup/
tar czf - picdb | split -b 3072m - picdb.tar.gz
if [ $? != 0 ]
    then
printf "mongodb备份压缩失败    $(date  +%Y%m%d_%A_%Z%T)\n"
    else
printf "mongodb备份压缩完成    $(date  +%Y%m%d_%A_%Z%T)\n"
fi

echo "剩余容量: `df -h |awk -F ‘[ ]+‘ ‘NR==7print $4‘`"

技术图片
压缩完的结果就是上图一样,只是个数较多。
接下来的问题是:现网网络带宽有限,如何把这些压缩包传回到本地。这里采用的 早上6点至晚上10点,进行限速传(限速500KB/s),晚上10点后至早上6点采取不限速。

#!/bin/bash
# SFTP传输脚本
# IP地址
IP=本地IP
# PORT端口
PORT=本地端口号
# USER用户名
USER=本地用户
# PASSWD密码
PASSWD=用户密码
#压缩包所在目录
CLIENTDIR=/data_master/backup/
#SFTP服务器待下载目录
SEVERDIR=/sftp/data_master/
# 设置当前小时
# xiaoshi=`date  +"%Y-%m-%d %H:%M.%S"|awk -F "[ :]+" ‘print $2‘`
#待下载文件名
# FILE=
while :
do
xiaoshi=`date  +"%Y-%m-%d %H:%M.%S"|awk -F "[ :]+" ‘print $2‘`
if [ $xiaoshi -ge 6 ] && [ $xiaoshi -lt 22 ];
    then
        echo "大于6时并小于22时,应该执行限速"
File=`head -1 /home/lsy/Sftp.txt`

printf "开始传输压缩备份    $(date  +%Y%m%d_%A_%Z%T)\n" >>/home/lsy/sftp_file.log
cd $CLIENTDIR
lftp -u 用户,密码 sftp://本地IP地址:端口号 << EOF
cd $SEVERDIR
lcd $CLIENTDIR
set net:limit-rate 500000:500000
reput $File
by
EOF
if [ $? -eq 0 ]
    then
        echo "传输成功。下面是文件名" >>/home/lsy/sftp_file.log
        echo $File >>/home/lsy/sftp_file.log
        sleep 3
    else
        echo "传输失败。" >>/home/lsy/sftp_file.log
        sleep 5
        exit 2
fi
sed -i 1d /home/lsy/Sftp.txt
printf "传输完成    $(date  +%Y%m%d_%A_%Z%T)\n" >>/home/lsy/sftp_file.log

else
    echo "取消限速"

File=`head -1 /home/lsy/Sftp.txt`

printf "开始传输压缩备份    $(date  +%Y%m%d_%A_%Z%T)\n" >>/home/lsy/sftp_file.log
cd $CLIENTDIR
lftp -u 用户,密码 sftp://本地IP:端口 << EOF
cd $SEVERDIR
lcd $CLIENTDIR
reput $File
by
EOF
if [ $? -eq 0 ]
    then
        echo "传输成功。下面是文件名" >>/home/lsy/sftp_file.log
        echo $File >>/home/lsy/sftp_file.log
        sleep 3
    else
        echo "传输失败。" >>/home/lsy/sftp_file.log
        sleep 5
        exit 2
fi
sed -i 1d /home/lsy/Sftp.txt
printf "传输完成    $(date  +%Y%m%d_%A_%Z%T)\n" >>/home/lsy/sftp_file.log
fi
done 
curl -s "钉钉机器人" -H "Content-Type: application/json" -d "‘msgtype‘: ‘text‘, ‘text‘: ‘content‘: \"$(date +%Y%m%d-%H%M%S):$(cat /home/lsy/sftp_file.log)\", ‘at‘: ‘isAtAll‘: true "

在这里有一点非常需要注意:set net:limit-rate 500000:500000 这个参数就是lftp进行限速的命令。网上找了好多文章,他们在 set net:limit-rate 500000,500000用的是,号 经过我实测和man lftp查看参数,这里用的是:希望大家能少采坑。
技术图片
以上就是我传输的过程和脚本,希望能够帮助到大家。

以上是关于Lftp+Sftp传输总结的主要内容,如果未能解决你的问题,请参考以下文章

linux下常用文件传输命令(转)

FTP服务总结

sh 使用lftp将文件传输到ftp主机

lftp 使用方法

ftps和sftp区别

shell使用lftp连接ftp和sftp,并可以指定私钥