项目需求要去一个文件服务器下载对账文件,保存至我们系统的前置服务器。然后其他厂商连入我们的前置服务器,将文件取走进行解析。
脚本完成后,又细想了一下,我的脚本如果获取不到文件,就会在后台一直运行。这样非常有风险,很可能会日志写太多,导致硬盘满掉。我需要让它能执行一定次数后,停下来。
#!/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
本文介绍了一个用于定时从指定服务器下载对账文件至本地系统的Shell脚本。该脚本能够处理文件下载的重试机制,并记录详细的日志信息。
4万+

被折叠的 条评论
为什么被折叠?



