日期:2014-05-16  浏览次数:20637 次

第一个蹩脚的Linux shell脚本——端口连接统计

目标

在linux下实现每天8点-0点每2分钟一次统计web服务器各端口的请求情况,并输出结果到相应的log文件--shell脚本

脚本存放目录

/opt/tomcat/bin/total.sh

主要命令

netstat、grep 、touch、cd、vi、mkdir、chmod、 crontab、cat、date

第一步:编写脚本

1、进入脚本存放目录:cd /opt/tomcat

2、创建文件夹、并进入: mkdir bin、cd bin

3、创建total.sh文件:touch total.sh

4、写total.sh文件:vi total.sh

使用i 命令在total.sh中输入以下内容

#! /bin/sh #定义脚本运行shell
count=0 #定义特定端口下的连接数
count1=0 #定义特定端口下来自 JAVA的连接数

#写日志
WriteLog(){
time=`date +%D' '%T` #获取执行时间
out=$time,$1,$count,$count1
echo $out >>/opt/tomcat/bin/bingfa_$1.log #记录统计日志

# 练习使用块注解及case语法
:<<block
case $1 in
9080) echo $out >>/opt/tomcat/bin/log_9080.txt;;
8080) echo $out >>/opt/tomcat/bin/log_8080.txt;;
7080) echo $out >>/opt/tomcat/bin/log_7080.txt;;
4080) echo $out >>/opt/tomcat/bin/log_4080.txt;;
*) echo " error "
esac
block
}
#统计并发量
Total(){
count=`netstat -anop|grep $1 -wc`
count1=`netstat -anop|grep java |grep $1 -wc`
WriteLog $1
}
Total 5080 #调用

后按esc :wq 保存退出,到此该脚本完成。

5、给该文件添加可执行权限:chmod +x total.sh

设置完成后就可以使用total.sh来运行该脚本了。

第二步:设置定时器

接下来就是在了linux上设置使其定时执行:
linux有个Crontab程序可以很好的完成我们的目标,避免我们自己在shell脚本中写循环执行。具体如下:
crontab -l (查看当前用户的定时程序)
crontab -e (进入编辑用户定时程序)

使用i命令,写入

*/2 8-23 * * * /opt/tomcat/bin/total.sh

输完内容后按esc :wq 保存退出
这样total.sh就会在每天的8-23点每两分钟执行一次。

补充

  1. shell脚本中定义的变量是全局的 ,没有作用域之分。因为刚开始由于疏忽time=`date +%D' '%T` 这句我是写在Total()函数中的,而在WirteLog()是直接调用$time的,结果发现程序正常运行,因此判定变量是全局的。
  2. shell脚本总的两种注释方式 #注释内容 或者 :<<block 注释内容 block 前者用来注释行,后者用来注释块
  3. 脚本编写中的第三步可以使用 cat> total.sh 命令替代