shell编程第八节--shell编程实战

shell快讲第一节--shell基础
shell快讲第二节--管道与重定向
shell快讲第三节--正则表达式
shell快讲第四节--sed与awk
shell快讲第五节--shell语法基础
shell快讲第六节--shell函数编程
shell快讲第七节--shell编程规范与调试
shell快讲第八节--shell编程实战

shell场景化编程

状态查询类脚本解析

1、进程状态查询,这是我们之前写的一个进程查询类的脚本,SEP是自定义的分隔符,实际写脚本中为了方便被第三方软件采集,自定义分隔符是必要的,当然或许输出不那么好看

#!/bin/bash

#通用的进程查看,提取了最关键的几个维度
#process_name='mysqld'

SEP="@"

checkprocess(){
    p_pids=`ps -aux |grep -v grep |grep $1|awk {'print $2'}`
    echo "HOSTNAME${SEP}COMMAND${SEP}STAT${SEP}USER${SEP}PID${SEP}CPU${SEP}MEM${SEP}INFO"
    if [ -z "$p_pids" ];then
      echo "no found process"
    else
        for p_pid in $p_pids;
        do
            p_command=`ps -axu |grep -v grep |grep $1 |grep $p_pid |awk {'print $11" "$12'}`
            p_stat=`ps -axu |grep -v grep |grep $1 |grep $p_pid |awk {'print $8'}`
            p_user=`ps -axu |grep -v grep |grep $1 |grep $p_pid |awk {'print $1'}`
            p_cpu=`ps -axu |grep -v grep |grep $1 |grep $p_pid |awk {'print $3'}`
            p_mem=`ps -axu |grep -v grep |grep $1 |grep $p_pid |awk {'print $4'}`
            # echo 'COMMAND,STAT,USER,PID,CPU,MEM,INFO'
            echo "$HOSTNAME${SEP}$p_command${SEP}$p_stat${SEP}$p_user${SEP}$p_pid${SEP}$p_cpu${SEP}$p_mem${SEP}found process $1"
        done

    fi
}
#checkprocess $process_name
checkprocess @option.process_name@

上面的脚本是我们随手写的,其实也有很多不科学的地方,首先各个采集数据并不是一个cpu时间片下的,大家看下下面,对比下上面的哪里不够科学

SEP="@"

checkprocess(){
    p_pids=`ps -aux |grep -v grep |grep $1|awk {'print $2'}`
    echo "COMMAND${SEP}STAT${SEP}USER${SEP}CPU${SEP}MEM${SEP}PID${SEP}HOSTNAME${SEP}INFO"
    if [ -z "$p_pids" ];then
        echo "No found process"
    else
        for p_pid in $p_pids;
        do
        a=`ps -axu |grep $1 |grep $p_pid`#这里如果不单独给变量,会被awk带来未知影响,要测试好
        echo $a |awk -v pid=$p_pid -v hostname=$HOSTNAME -v i="found telegraf" 'BEGIN{OFS="@"}{print $8,$1,$3,$4,pid,hostname,i}'
        done
    fi
}
#checkprocess $process_name
checkprocess telegraf

分析:下面的代码所有的采集数据是一个ps命令产生的,相对第一个代码就更科学一点,我们也可以用time命令来测下两个脚本的执行时间损耗
未完待续.....

你可能感兴趣的:(shell编程第八节--shell编程实战)