本文共 4787 字,大约阅读时间需要 15 分钟。
项目需求要去一个文件服务器下载对账文件,保存至我们系统的前置服务器。然后其他厂商连入我们的前置服务器,将文件取走进行解析。
脚本完成后,又细想了一下,我的脚本如果获取不到文件,就会在后台一直运行。这样非常有风险,很可能会日志写太多,导致硬盘满掉。我需要让它能执行一定次数后,停下来。#!/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=$1fi #定义服务器系统时间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 <> $logDire$tradeDay$suffixNameecho "**********脚本开始执行时间`date +"%Y-%m-%d %H:%M:%S"`*******" >> $logDire$tradeDay$suffixNameif [ ! -d "$logDire" ];then mkdir "$logDire" echo "创建日志目录======$logDire"fiif [ ! -d "$localDire$tradeDay" ];then mkdir "$localDire$tradeDay" echo "对账文件将会保存在[$localDire$tradeDay]的目录下" >> $logDire$tradeDay$suffixNameficd $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 fifi##############################################################################################################echo "**********对账文件下载的脚本执行结束***********" >> $logDire$tradeDay$suffixNameecho "**********脚本结束时间`date +"%Y-%m-%d %H:%M:%S"`*****" >> $logDire$tradeDay$suffixName
转载于:https://blog.51cto.com/babyhanggege/2166006