Linux/Python学习论坛-京峰教育

 找回密码
 立即注册

一键登录:

搜索
热搜: 活动 交友 discuz
查看: 1327|回复: 0

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

[复制链接]

22

主题

69

帖子

2156

积分

金牌会员

Rank: 6Rank: 6

积分
2156
发表于 2015-7-25 10:14:48 | 显示全部楼层 |阅读模式
本帖最后由 kongzi68 于 2015-7-27 10:11 编辑

脚本功能:
    通过定时计划任务运行该脚本,定期上传指定文件。
    之前写了这个脚本,有时候网络不稳定的时候,总是上传失败。写了循环去传,但是苦于不知道怎样去获取FTP返回的错误状态,后来度娘到可以把ftp的运行错误日志记录写到文件中,因这个点来源于分享。因此,现在把整个脚本给分享出来,提供给大家一个思路。
    通过检测这个错误日记录,并返回的状态,去循环上传指定文件,并追加脚本运行日志记录,以便于跟踪脚本运行情况。

    博客地址:http://kongzi68.blog.51cto.com/1432619/1678236

    脚本目前发现一个不完善的地方:需要在循环的时候,判断一下文件是否存在,不存在就不执行了。代码结构如下:    [判断文件是否存在] && {循环代码}。
  1. #!/bin/bash
  2. #upload gonet log to ftp_server
  3. #by colin on 2015-07-23

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

  6. gonetdir='/data/logs/www/'
  7. ftp_log_dir='/nginxlog/testnet'
  8. #############################
  9. t_month=`date +%Y%m`
  10. t_last_hour=`date -d '1 hour ago' +%H`
  11. t_yesterday=`date -d "yesterday" +%d`
  12. t_today=`date +%d`
  13. T=`echo $(date +%k) |sed 's/ //g'`

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

  20. put_log_name="yjww_${t_last_hour}.log"
  21. ftp_err_dir="/tmp/ftp_err/"
  22. [ -d ${ftp_err_dir} ] || mkdir -p ${ftp_err_dir}
  23. ftp_err_log="${ftp_err_dir}ftp_temp_yjww_err.log"

  24. #FTP自动化上传函数
  25. send_gonet_log()
  26. {
  27.         ftp -i -n FTP服务器的IP地址 21 2>${ftp_err_log} << _EOF_
  28.         user 用户名 密码
  29.         passive
  30.         bin
  31.         lcd ${temp_gonetdir}
  32.         cd  ${ftp_log_dir}
  33.         put ${put_log_name}
  34.         bye
  35. _EOF_
  36. #统计前面FTP运行输出的错误日志记录行数
  37. log_count=`cat ${ftp_err_log}|wc -l`
  38. [ ${log_count} -eq 0 ] && return 0 || return 1
  39. }

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

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

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

复制代码



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|京峰教育,只为有梦想的人 ( 京ICP备15013173号 )

GMT+8, 2019-3-20 09:13 , Processed in 0.038929 second(s), 14 queries , Apc On.

快速回复 返回顶部 返回列表