现实需求:
对于一些不是实时性的页面,数据变化也不是很大的页面,我们可以把该JSP或freemark页面进行静态化。
这样的好处,当我们的服务挂掉了,通过nginx的代理,我们依然可以访问相关的页面。
实现:
通过Shell脚本和linux的crontab的定时任务实现。这里只讲如何实现该脚本。
1.首先我们要学会使用curl脚本:
下载单个文件,默认将输出打印到标准输出中(STDOUT)中
curl http://www.centos.org
通过-o/-O选项保存下载的文件到指定的文件中:
-o:将文件保存为命令行中指定的文件名的文件中
-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