shell编写动态页面,听起来好搞笑,确实 实现起来也很搞笑


举个例子我想通过web页面展示我网站每小时的pv数 以及500错

spacer.gif当然统计pv数和500错 这要统计前台的nginx访问日志来得到


答题思路

因为我们前台有4台nginx,我要首先合并每小时的4台nginx日志,统计出pv数和500错,然后把值传到我的web服务本机,具体脚本如下


spacer.gif一.nginx日志合并所在服务器上编写脚本如下

#!/bin/bash
time=`date +%Y%m%d%H -d "-1 hour"`

rsync -av 192.168.0.20::logs/access.log.$time /backup/nginxlog/20/

rsync -av 192.168.0.149::logs/access.log.$time  /backup/nginxlog/149/

rsync -av 192.168.0.148::logs/access.log.$time  /backup/nginxlog/148/

rsync -av 192.168.0.48::logs/access.log.$time  /backup/nginxlog/48/


cd /backup/nginxlog

logs=`find ./ -name access.log.$time`

cat  $logs  >  /backup/nginxlog/agghour/access.log.$time.temp

grep jwml? /backup/nginxlog/agghour/access.log.$time.temp|wc -l>/opt/yanchao/huoqupv.txt
awk '$9~/500/{print}' /backup/nginxlog/agghour/access.log.$time.temp|wc -l>/opt/yanchao/huoqu500.txt
awk '{++a[$1]}END{for ( i in a )print i,a[i]}' /backup/nginxlog/agghour/access.log.$time.temp|sort -k2 -rn |head -n10|awk '{print $1}'>/opt/yanchao/tongji.txt
awk '{++a[$1]}END{for ( i in a )print i,a[i]}' /backup/nginxlog/agghour/access.log.$time.temp|sort -k2 -rn |head -n10|awk '{print $2}'>/opt/yanchao/cishu.txt

cat  /backup/nginxlog/agghour/access.log.$time.temp  |sort -k 4  >  /backup/nginxlog/agghour/access.log.$time

rm -f /backup/nginxlog/agghour/access.log.$time.temp

rm -f /backup/nginxlog/20/* && rm -f /backup/nginxlog/149/* && rm -f /backup/nginxlog/148/*  &&  rm -f /backup/nginxlog/48/*

spacer.gif

二.在web服务器上起个80端口

在web根目录新建index.html

<table border="1" width=100%>
 <tr>
   <th>Time</th>
   <th>Count PV</th>
   <th>500error</th>
 </tr>

新建index1.html

 <tr>

 <\tr>

</table>

编写脚本如下

#!/bin/bash
rm -f /var/www/html/index1.html
cp /var/www/html/index2.html /var/www/html/index1.html
rm -f /var/www/html/test.txt
c=`cat /opt/yanchao/pv.txt`
a=`date +%H:00 -d '-1 hour'`
b=`date +%H:00`
g=`cat /opt/yanchao/500.txt`
echo -e "$a-$b\t$c\t$g\t" >/var/www/html/test1.txt
e=($(awk '{print $1}' /var/www/html/test1.txt))
f=($(awk '{print $2}' /var/www/html/test1.txt))
d=($(awk '{print $3}' /var/www/html/test1.txt))

for ((i=0;i<=${#e[@]};i++))
do
       echo  "<td>${e[i]}</td>" >>/var/www/html/test.txt
       echo  "<td>${f[i]}</td>" >>/var/www/html/test.txt
       echo  "<td>${d[i]}</td>" >>/var/www/html/test.txt
       echo -e "\n"
done
sed -i '/<tr>/r /var/www/html/test.txt' /var/www/html/index1.html
echo `cat /var/www/html/index.html` >> /var/www/html/zuizhong.html
echo `cat /var/www/html/index1.html` >> /var/www/html/zuizhong.html


三.新建获取数值脚本

#!/bin/bash
ssh 192.168.0.96 "cat /opt/yanchao/huoqupv.txt" >/opt/yanchao/pv.txt
ssh 192.168.0.96 "cat /opt/yanchao/huoqu500.txt" > /opt/yanchao/500.txt
ssh 192.168.0.96 "cat /opt/yanchao/tongji.txt" > /opt/yanchao/tongji.txt
ssh 192.168.0.96 "cat /opt/yanchao/cishu.txt" > /opt/yanchao/cishu.txt


添加crontab

8 * * * * (sh /opt/yanchao/huoqu.sh &)


最后访问zuizhong.html