zoukankan      html  css  js  c++  java
  • 下载一个指定文件,下载成功后修改权限,自动重试60次,带详细日志记录。

    #!/bin/sh
    file_real_size="21444"
    update_sh_version="1"
    url="http://www.xxx.com:5000/upload/wang_download"
    referer="--header "referer:www.xxx.com
    X-Cookie:abc""
    
    logfile="/www/update.html"
    date_time=`date`
    version_flag_file="/www/V_${update_sh_version}.txt"
    file_name=`basename ${url}`
    local_path="/sbin/${file_name}"
    local_tmp_path="/tmp/${file_name}"
    
    aim_path="/sbin/wang_download"
    
    echo "log = ${logfile},file_name=${file_name},local_tmp_path=${local_tmp_path}"
    
    echo "<html>
    <head>
    	<title>Update Log</title>
    </head>
    <body>
    <h1>Router update</h1>
    Start at: ${date_time} <br/>
    For version ${update_sh_version}<br/>
    " > $logfile
    
    chmod 755 $logfile
    
    log(){
    	echo "$1"
    	echo "$1" >> $logfile
    }
    logend(){
    	echo "</body></html>" >> $logfile
    }
    if [ -f $version_flag_file ]; then
    	log "Newest Version, nothing to do<br>"
    	logend
    else	
    	F="yes"	
    	C=0
    	RS="NO"
    	while [ "$F" = "yes" ]; do
    		flag="yes"
    		count=0
    		
    		log "Try to download new version file - ${C} times<br/>"
    		wget $referer -c -q $url -O $local_tmp_path&
    		while [ "$flag" = "yes" ]; do
    			if [ -f $local_tmp_path ]; then
    				file_size=`ls -l ${local_tmp_path}|awk '{print $5}'`
    				if [ "$file_real_size" = "$file_size" ]; then
    					flag="OK"
    					RS="OK"
    				else
    					log "downloading,size=${file_size}...<br/>"
    					sleep 3
    				fi
    			else
    				log "not start...<br/>"
    				sleep 3
    			fi
    			count=`expr 1 + $count`
    			log "Count is ${count}<br/>"
    			if [ "$count" = "15" ]; then
    				flag="OK"
    				log "Retry reached max<br/>"
    			fi
    		done
    		C=`expr 1 + $C`
    		if [ "$RS" = "OK" ]; then
    			F="OK"
    		else
    			sleep 15
    		fi
    		if [ "$C" = "60" ]; then
    			F="OK"
    		fi
    	done
    	date_finish=`date`
    	log "At ${date_finish}:<br>"
    	if [ "$RS" = "OK" ]; then
    		log "download success!<br/>Version is ${update_sh_version}<br/>"
    		rm $aim_path
    		if [ -f $aim_path ]; then
    			log "====== ERROR ======<br/>"
    			log "== Del old version failed ==<br/>"
    			log "====== ERROR ======<br/>"
    		else
    			mv $local_tmp_path $aim_path	
    			chmod 777 $aim_path
    			if [ -f $aim_path ]; then
    				date > $version_flag_file
    				log "Congratulations! Update OK!<br/>"
    			else
    				log "====== ERROR ======<br/>"
    				log "== Move file failed ==<br/>"
    				log "====== ERROR ======<br/>"
    			fi
    		fi
    	else
    		log "download failed, will retry next on boot<br/>"
    	fi
    	logend
    fi
    
    
    
    

    此脚本用于实现路由器上一个程序的自动更新功能。

  • 相关阅读:
    Matlab n阶矩阵行、列互换
    IfcGeographicElement
    集合系列 Set(七):LinkedHashSet
    集合系列 Set(六):HashSet
    集合系列 List(五):Stack
    集合系列 List(四):LinkedList
    集合系列 List(三):Vector
    集合系列 List(二):ArrayList
    集合系列(一):集合框架概述
    集合系列开篇:为什么要学集合?
  • 原文地址:https://www.cnblogs.com/lein317/p/5067515.html
Copyright © 2011-2022 走看看