下载一个指定文件,下载成功后修改权限,自动重试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



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

原文地址:https://www.cnblogs.com/lein317/p/5067515.html