脚本功能:

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

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

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

#!/bin/bash#upload gonet log to ftp_server#by colin on 2015-07-23scripts_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}/fiput_log_name="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_logif [ $? -eq 0 ];then	echo "`date +%F" "%T":"%N` Send : ${put_log_name} to ftp_server was successfully." >> ${scripts_run_log}	return 0else	echo "`date +%F" "%T":"%N` Send : ${put_log_name} more than $x time." >> ${scripts_run_log}	sleep 120	return 1fi}#循环3次,总共6分钟x=1i=1until [ "$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}