脚本功能:
通过定时计划任务运行该脚本,定期上传指定文件。
之前写了这个脚本,有时候网络不稳定的时候,总是上传失败。写了循环去传,但是苦于不知道怎样去获取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_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_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}
时间: 2024-10-07 10:55:19