现实需求:html
对于一些不是实时性的页面,数据变化也不是很大的页面,咱们能够把该JSP或freemark页面进行静态化。java
这样的好处,当咱们的服务挂掉了,经过nginx的代理,咱们依然能够访问相关的页面。python
实现:linux
经过Shell脚本和linux的crontab的定时任务实现。这里只讲如何实现该脚本。nginx
1.首先咱们要学会使用curl脚本:json
下载单个文件,默认将输出打印到标准输出中(STDOUT)中centos
curl http://www.centos.org缓存
经过-o/-O选项保存下载的文件到指定的文件中:curl
-o:将文件保存为命令行中指定的文件名的文件中jsp
-O:使用URL中默认的文件名保存文件到本地
# 将文件下载到本地并命名为mygettext.html
curl -o mygettext.html http://www.gnu.org/software/gettext/manual/gettext.html
# 将文件保存到本地并命名为gettext.html
curl -O http://www.gnu.org/software/gettext/manual/gettext.html
例子1:index.sh 具体的脚本以下: 说明: 1.http://127.0.0.1:8082/index?clean=true 是咱们本机的一个容器服务提供的JSP页面。 2.status1 ,status2,status3,status 是为了判断服务返回的JSP页面是否是合法的, 根据你的JSP页面具体实现。由于一旦JSP页面错误了,返回了错误的页面覆盖了好的页面, 静态化就没有任何意义了。 3.cp ,mv 操做是为了备份和覆盖当前的静态页面。 4.sed的简单用法,sed的操做不是必须的。http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html #!/bin/sh #resin index #/opt/www/pages/index.tmp #index page http_code=`curl -o /opt/www/pages/index.tmp -s -w %{http_code} http://127.0.0.1:8082/index?clean=true`; if [ ${http_code} -eq 200 ] then status1=`cat /opt/www/pages/index.tmp |grep -o "content_item"|wc -l` status2=`cat /opt/www/pages/index.tmp |grep -o "photocdn"|wc -l` status3=`cat /opt/www/pages/index.tmp |grep -o "focus"|wc -l` status=`cat /opt/www/pages/index.tmp |grep -o "data-columnid"|wc -l` # echo "${status1},${status2},${status3},${status}" if [ ${http_code} -eq 200 ] && [ ${status} -ge 15 ] && [ ${status1} -ge 80 ] && [ ${status2} -ge 80 ] && [ ${status3} -ge 1 ] then date=`date +"%Y-%m-%d-%H-%M"`; cp /opt/www/pages/index.html /opt/www/pages/index.${date}; mv /opt/www/pages/index.tmp /opt/www/pages/index.html; #debug_str='<!--'`date +"%Y-%m-%d-%H-%M"`'-->' #sed -i '1a\'${debug_str} /opt/www/pages/index.html else echo "build index ${status} ${status2} ${status3} fail" fi; else echo "build index fail!"; fi;
例子2:静态化相关的子页面,test2.sh #!/bin/sh #pgc page cids=(70040000 70080000 70060000 70070000 70090000 70120000 70100000 70110000 71010000 71020000 71030000 71060000 71050000 71040000 71070000 71080000 71090000 71100000 71220000 71110000 71120000 71230000 71130000 71140000 71150000 711600 00 71170000 71180000 71200000 71260000 71270000) i=0 length=${#cids[*]} while [ $i -lt $length ] ; do cid=${cids[$i]} http_code=`curl -o /opt/www/pages/pgc$cid.tmp -s -w %{http_code} http://127.0.0.1:8082/pgc/$cid?clean=true`; status=`cat /opt/www/pages/pgc$cid.tmp |grep -o "data-columnid"|wc -l` if [ ${http_code} -eq 200 ] && [ ${status} -ge 1 ] then date=`date +"%Y-%m-%d-%H-%M"`; if [ -f /opt/www/pages/pgc$cid.html ] then cp /opt/www/pages/pgc$cid.html /opt/www/pages/pgc$cid.${date}; fi; mv /opt/www/pages/pgc$cid.tmp /opt/www/pages/pgc$cid.html; debug_str='<!--'`date +"%Y-%m-%d-%H-%M"`'-->' sed -i '1a\'${debug_str} /opt/www/pages/pgc$cid.html else echo "build hots$cid fail!" fi; let i++ done
例子3:test3.sh #!/bin/sh #hots page #精选: hots128.html 搞笑:hots132.html #福利:hots133.html 新闻:hots129.html #娱乐:hots130.html 体育:hots131.html #一分钟:hots134.html 世界杯:hots177.html #美剧闹:hots164.html #son hots249.html cids=(128 132 129 130 131 223 224 225 134 164 249) i=0 length=${#cids[*]} while [ $i -lt $length ] ; do cid=${cids[$i]} http_code=`curl -o /opt/www/pages/hots$cid.tmp -s -w %{http_code} http://127.0.0.1:8082/hots/$cid?clean=true`; if [ ${http_code} -eq 200 ] then date=`date +"%Y-%m-%d-%H-%M"`; if [ -f /opt/www/pages/hots$cid.html ] then cp /opt/www/pages/hots$cid.html /opt/www/pages/hots$cid.${date}; fi; mv /opt/www/pages/hots$cid.tmp /opt/www/pages/hots$cid.html; debug_str='<!--'`date +"%Y-%m-%d-%H-%M"`'-->' sed -i '1a\'${debug_str} /opt/www/pages/hots$cid.html else echo "build hots$cid fail!" fi; let i++ done
例子4:好比咱们网站通用的引用的头部和尾部,要常常改, 咱们不能每次去修改JSP再去上线吧。这些能够有网站的编辑维护, 咱们按期下载相关的文件就行了。 #!/bin/sh wget http://tv.baidu.com/s2012/frag/83/20092861_344978361.inc -q -O /opt/www/h5-server/WEB-INF/includes/footer_tmp.jsp >/dev/null 2>&1 cd /opt/www/h5-server/WEB-INF/includes/ iconv -f gb2312 -t UTF-8 footer_tmp.jsp -o footer.jsp rm -rf footer_tmp.jsp 例子5:若是咱们想定时刷新某个接口,或者定时让某个数据刷入缓存。 咱们也能够作一个定时任务的脚本,定时执行脚本。 #!/bin/sh curl -o /tmp/cooperation.tmp http://localhost:8082/cooperation/listall.json?clean=true > /dev/null 2>&1 exit 0
例子8:test8 #!/bin/sh wget http://tv.baidu.com/s2013/frag/78/120173_381017846.inc -q -O /opt/www/h5-server/WEB-INF/includes/navProms_tmp.jsp >/dev/null 2>&1 cd /opt/www/h5-server/WEB-INF/includes/ iconv -f GBK -t UTF-8 navProms_tmp.jsp -o navProms.jsp sed -i '1i<%@ page language=\"java\" pageEncoding=\"UTF-8\" contentType=\"text/html;charset=utf-8\"%>' /opt/www/h5-server/WEB-INF/includes/navProms.jsp #yes|cp -af /opt/www/h5-server/WEB-INF/includes/navProms.jsp /opt/www/HotHtml5/WEB-INF/includes/navProms.jsp rm -rf navProms_tmp.jsp