linux ftp下载文件,linux上使用FTP下载文件

本文介绍了一个用于定时从指定服务器下载对账文件至本地系统的Shell脚本。该脚本能够处理文件下载的重试机制,并记录详细的日志信息。

项目需求要去一个文件服务器下载对账文件,保存至我们系统的前置服务器。然后其他厂商连入我们的前置服务器,将文件取走进行解析。

脚本完成后,又细想了一下,我的脚本如果获取不到文件,就会在后台一直运行。这样非常有风险,很可能会日志写太多,导致硬盘满掉。我需要让它能执行一定次数后,停下来。

#!/bin/bash

#@author:ping

#@phone:

#@function:本脚本用来定时从GC服务器下载对账文件至第三方支付系统的前置服务器

# 对账文件全部下载完成后会生成一个.ok文件

#@instructions:1、定时任务实现 2、脚本+日期(形如 ./ftpDownload.sh 20180820)

#@associative directory:

# 日志目录: /apache/swift/unionPayReckonFile/logs

# 脚本目录: /apache/swift/

# 对账文件目录: /apache/swift/unionPayReckonFile

##############################如下为定义的变量区###########################

#配置文件的路径

configPath=$PWD/.ftpDownload.conf

#默认当前系统前一日

if [ ! -n "$1" ];then

tradeDay=`date -d "1 days ago" +%Y%m%d`

else

tradeDay=$1

fi

#定义服务器系统时间

today=`date +%Y%m%d`

#定义本地的下载存放目录

localDire="/apache/swift/unionPayReckonFile/"

#定义日志目录

logDire="/apache/swift/unionPayReckonFile/logs/"

#日志文件后缀名

suffixName=".log"

#截取日期

subYesterday=`expr substr "$tradeDay" 3 6 `

#定义五个需要的文件名

file1="IND"$subYesterday"01ACOMN"

file2="IND"$subYesterday"99ALFEE"

file3="IND"$subYesterday"99ILFEE"

file4="IND"$subYesterday"99AFCP"

file5="IND"$subYesterday"99IFCP"

file6="IND"$subYesterday"01ACOMN.ok" ##确认文件

#定义一个空白数组,用来存放获取成功的文件

succ_arr=()

####################GC服务器信息######################

#ip=192.168.43.237

#FTP账号

#u=tppview

#FTP密码

#pass=Tpp12#$

#GC服务器的目录地址

#remoteDire="/home/gbatch/batch/file/"

#addtoDire="/0000/CUP/04791922/"

####################GC服务器信息######################

#GC服务器地址,40.3.11.6为备用服务器,如果40.3.11.5发生宕机,可以修改ip切换到备用服务器。

ip=`grep "gc_ip" $configPath |awk -F= '{printf "%s",$2}'`

#FTP账号

u=`grep "gc_u" $configPath |awk -F= '{printf "%s",$2}'`

#FTP密码

pass=`grep "gc_pass" $configPath |awk -F= '{printf "%s",$2}'`

#GC服务器的目录地址

remoteDire=`grep "gc_remoteDire" $configPath |awk -F= '{printf "%s",$2}'`

addtoDire=`grep "gc_addtoDire" $configPath |awk -F= '{printf "%s",$2}'`

####################函数定义######################

ftpFun(){

ftp -n <

open $ip

user $u $pass

binary

passive

cd $remoteDire$tradeDay$addtoDire #远程服务器文件目录

hash

prompt off #关闭交互

mget $1

close

bye

EOF

}

###################下载对账文件###################

echo "**********对账文件下载的脚本开始执行***********" >> $logDire$tradeDay$suffixName

echo "**********脚本开始执行时间`date +"%Y-%m-%d %H:%M:%S"`*******" >> $logDire$tradeDay$suffixName

if [ ! -d "$logDire" ];then

mkdir "$logDire"

echo "创建日志目录======$logDire"

fi

if [ ! -d "$localDire$tradeDay" ];then

mkdir "$localDire$tradeDay"

echo "对账文件将会保存在[$localDire$tradeDay]的目录下" >> $logDire$tradeDay$suffixName

fi

cd $localDire$tradeDay //切换目录

if [ -f "$localDire$tradeDay"/"$file6" ];then

echo "目录[$localDire$tradeDay]下已经存在确认文件[$file6]" >> $logDire$tradeDay$suffixName

echo "交易日[$tradeDay]的对账文件已经下载完成" >> $logDire$tradeDay$suffixName

else

echo "不存在确认文件[$file6],开始下载对账文件" >> $logDire$tradeDay$suffixName

i=1 #对下载成功的文件个数计数

for fileName in $file1 $file2 $file3 $file4 $file5;do

j=1 #对休眠次数计数

until [ -f $localDire$tradeDay"/"$fileName ];do

echo "开始下载对账文件=================="$fileName >> $logDire$tradeDay$suffixName

ftpFun $fileName

echo "对账文件下载过程结束=================="$fileName >> $logDire$tradeDay$suffixName

echo "$localDire$tradeDay"/"$fileName =====文件名"

if [ -f $localDire$tradeDay"/"$fileName ];then

echo "对账文件[$fileName]已经下载到本地目录[$localDire$tradeDay]" >> $logDire$tradeDay$suffixName

succ_arr[i]=$fileName

echo "下载的第$i个文件是$fileName" >> $logDire$tradeDay$suffixName

let i=i+1

else

echo "本次没有获取到对账文件============"$fileName >> $logDire$tradeDay$suffixName

echo "休眠15分钟后继续下载文件==========="$fileName >> $logDire$tradeDay$suffixName

sleep 1s #休眠15分钟

if [ $j -gt 4 ];then

break

else

echo "$fileName文件下载过程的第$j次休眠" >> $logDire$tradeDay$suffixName

let j=j+1

fi

fi

done

done

num=${#succ_arr[@]}

if [ -z "$num" ];then

echo "交易日[$tradeDay]的对账文件没有下载完成,存放路径为[$localDire$tradeDay]" >> $logDire$tradeDay$suffixName

echo "一个文件也没有下载成功" >> $logDire$tradeDay$suffixName

else

echo "下载成功的文件个数是$num" >> $logDire$tradeDay$suffixName

if [ 5 -eq $num ];then

touch $localDire$tradeDay"/"$file6

echo "交易日[$tradeDay]的对账文件全部下载完成,存放路径为[$localDire$tradeDay]" >> $logDire$tradeDay$suffixName

else

echo "交易日[$tradeDay]的对账文件没有全部下载完成,存放路径为[$localDire$tradeDay]" >> $logDire$tradeDay$suffixName

fi

fi

fi

##############################################################################################################

echo "**********对账文件下载的脚本执行结束***********" >> $logDire$tradeDay$suffixName

echo "**********脚本结束时间`date +"%Y-%m-%d %H:%M:%S"`*****" >> $logDire$tradeDay$suffixName

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值