现实需求:

对于一些不是实时性的页面,数据变化也不是很大的页面,我们可以把该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