shell脚本专题(08):让脚本更优雅--循环
  klLXbSWFRyKW 2023年11月02日 50 0

前言:最近生产上业务卡顿,怀疑是程序连数据库有问题,现需要部署监控,获取各服务与数据库的连接数,输出格式为key:vaule。

一、传统模式

#!/bin/bash

XDB1=10.11.11.116
XDB2=10.11.11.117

FLOW_PS=`ps -ef|grep flow|grep -v grep|awk {'print $2'}`
OUT_PS=`ps -ef|grep out|grep -v grep|awk {'print $2'}`
SETT_PS=`ps -ef|grep sett|grep -v grep|awk {'print $2'}`
TASK_PS=`ps -ef|grep task|grep -v grep|awk {'print $2'}`
WEB_PS=`ps -ef|grep web|grep -v grep|awk {'print $2'}`
TOM_PS=`ps -ef|grep apache-tomcat|grep -v grep|awk {'print $2'}`

FLOW_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $FLOW_PS|wc -l`
FLOW_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $FLOW_PS|wc -l`

OUT_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $OUT_PS|wc -l`
OUT_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $OUT_PS|wc -l`

SETT_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $SETT_PS|wc -l`
SETT_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $SETT_PS|wc -l`

TASK_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $TASK_PS|wc -l`
TASK_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $TASK_PS|wc -l`

WEB_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $WEB_PS|wc -l`
WEB_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $WEB_PS|wc -l`

TOM_CNT116=`netstat -anlp|grep ESTABLISHED|grep $XDB1|grep $TOM_PS|wc -l`
TOM_CNT117=`netstat -anlp|grep ESTABLISHED|grep $XDB2|grep $TOM_PS|wc -l`

echo "flow116:$FLOW_CNT116"
echo "flow117:$FLOW_CNT117"

echo "out116:$OUT_CNT116"
echo "out117:$OUT_CNT117"

echo "sett116:$SETT_CNT116"
echo "sett117:$SETT_CNT117"

echo "task116:$TASK_CNT116"
echo "task117:$TASK_CNT117"

echo "web116:$WEB_CNT116"
echo "web117:$WEB_CNT117"

echo "apache-tomcat116:$TOM_CNT116"
echo "apache-tomcat117:$TOM_CNT117"

一共6个服务,2个数据库,输出为“服务名”+“数据库标签”+“连接数”

运行结果:

shell脚本专题(08):让脚本更优雅--循环_shell

二、循环

#!/bin/bash

xdb="10.11.11.116 10.11.11.117"

for ps in flow  out sett task web apache-tomcat
do 
  num=`ps -ef|grep $ps|grep -v grep|awk {'print $2'}`
  for db in $xdb
  do
    cnt=`netstat -anlp|grep ESTABLISHED|grep $db|grep $num|wc -l`
    tip=`echo $db|cut -d . -f 4` 
    echo "${ps}${tip}:${cnt}"
  done
done

进程名为第一个循环,数据库名为第二个循环,tip用来区分不同数据库

运行结果:

shell脚本专题(08):让脚本更优雅--循环_shell_02

三、总结

两种不通的方式可以得到相同的结果。传统方式直接明了、通俗易懂,但是略显臃肿;对比之下循环方式简洁优雅。


更多请点击: shell专题

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  6YY0QMPUXEwu   2023年12月10日   31   0   0 linux网卡
  Ex81gqy3LOX7   2023年12月07日   23   0   0 linux
  nIt0XG0acU8j   2023年12月11日   32   0   0 linuxhtop
  nIt0XG0acU8j   2023年12月09日   39   0   0 linuxsort