shell-scripts,FTP自动化上传脚本,可循环,直到上传成功为止

脚本功能:

通过定时计划任务运行该脚本,定期上传指定文件。

之前写了这个脚本,有时候网络不稳定的时候,总是上传失败。写了循环去传,但是苦于不知道怎样去获取FTP返回的错误状态,后来度娘到可以把ftp的运行错误日志记录写到文件中,因这个点来源于分享。因此,现在把整个脚本给分享出来,提供给大家一个思路。

通过检测这个错误日记录,并返回的状态,去循环上传指定文件,并追加脚本运行日志记录,以便于跟踪脚本运行情况。

#!/bin/bash
#upload gonet log to ftp_server
#by colin on 2015-07-23

scripts_run_log='/var/log/cron_scripts_run.log'
echo "date +%F" "%T":"%N Script : $0 will runing..." >> ${scripts_run_log}

gonetdir='/data/logs/www/'
ftp_log_dir='/nginxlog/testnet'
#############################
t_month=date +%Y%m
t_last_hour=date -d '1 hour ago' +%H
t_yesterday=date -d "yesterday" +%d
t_today=date +%d
T=echo $(date +%k) |sed 's/ //g'

#凌晨的时候,文件目录是昨天的
if [ $T -eq 0 ];then
temp_gonetdir=${gonetdir}${t_month}/${t_yesterday}/
else
temp_gonetdir=${gonetdir}${t_month}/${t_today}/
fi

put_logname="yjww${t_last_hour}.log"
ftp_err_dir="/tmp/ftp_err/"
[ -d ${ftp_err_dir} ] || mkdir -p ${ftp_err_dir}
ftp_err_log="${ftp_err_dir}ftp_temp_yjww_err.log"

#FTP自动化上传函数
send_gonet_log()
{
ftp -i -n FTP服务器的IP地址 21 2>${ftp_err_log} << EOF
user 用户名 密码
passive
bin
lcd ${temp_gonetdir}
cd ${ftp_log_dir}
put ${put_log_name}
bye
EOF
#统计前面FTP运行输出的错误日志记录行数
log_count=cat ${ftp_err_log}|wc -l
[ ${log_count} -eq 0 ] && return 0 || return 1
}

##########################
#调用FTP上传函数,返回until需要的状态值
#每次睡眠120秒,总循环三次
function run_send_gonet(){
send_gonet_log
if [ $? -eq 0 ];then
echo "date +%F" "%T":"%N Send : ${put_log_name} to ftp_server was successfully." >> ${scripts_run_log}
return 0
else
echo "date +%F" "%T":"%N Send : ${put_log_name} more than $x time." >> ${scripts_run_log}
sleep 120
return 1
fi
}

#循环3次,总共6分钟
x=1
i=1
until [ "$i" -eq 0 ];do
[ $x -gt 3 ] && {
echo "date +%F" "%T":"%N Send : ${put_log_name} to ftp_server was failed, Please check..." >> ${scripts_run_log}
exit
}
run_send_gonet
i=echo $?
x=expr $x + 1
done

#删除FTP产生的临时错误日志文件
[ -f ${ftp_err_log} ] && rm ${ftp_err_log}
echo "date +%F" "%T":"%N Script : $0 done." >> ${scripts_run_log}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章