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}

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