Linux shell 脚本 实现查询出进程的名字,cup内存占用率,启动时间在线状态等格式化输出

目的是查询出进程的名字,cup内存占用率,启动时间在线状态等格式化输出

脚本实现的结果:
[[email protected] ~]# sh /app/shell/app_status.sh
ProcessName---------GroupName-------Status-----PID----CPU----MEMORY----StarTime---
nginx WEB STOPED NULL NULL NULL NULL
httpd WEB STOPED NULL NULL NULL NULL
mysql DB RUNNING 3019 0.2 24.1 Wed Sep 11 12:02:21 2019
oracle DB STOPED NULL NULL NULL NULL
[[email protected] ~]# sh /app/shell/app_status.sh nginx
ProcessName---------GroupName-------Status-----PID----CPU----MEMORY----StarTime---
nginx WEB RUNNING 4262 0.0 0.1 Wed Sep 11 12:18:19 2019
nginx WEB RUNNING 4263 0.0 0.1 Wed Sep 11 12:18:19 2019

脚本使用的配置文件存放路径:/app/shell/process.cfg
process.cfg的内容

[GROUP_LIST]
WEB
DB
HADOOP
YUM

[WEB]
nginx
httpd

[DB]
mysql
oracle
postgresql

[HADOOP]
datanode
namenode
journalnode

[YUM]
resourcemanager
nodemanager

脚本内容:
#!/bin/bash
#
#Func:Get Porcess Status IN process.cfg

#Define Variables
HOME_DIR="/app/shell/"
CONFIG_FILE="process.cfg"
this_pid=$$
#
#get_all_goup:得到组的成员
#该函数无需输入参数,返回配置配置文件 process.cfg中所有的组信息,如WEB ,DB等
#

function get_all_group
{
G_LIST=sed -n "/\[GROUP_LIST\]/,/\[.*\]/p" ${HOME_DIR}/${CONFIG_FILE}|egrep -v "(^$|\[.*\])"
echo "${G_LIST}"
}
#get_all_process
#该函数无需输入任何参数,返回配置文件process.cfg中所有进程信息
#
function get_all_process
{
for g in get_all_group
do
P_LIST=sed -n "/\[${g}\]/,/\[.*\]/p" ${HOME_DIR}/${CONFIG_FILE} |egrep -v "(^$|\[.*\])"
echo "${P_LIST}"
done
}
#get_process_pid_by_name
#该函数接收一个参数,参数是进程名,返回的是一个进程PID的列表,可能是一个或是多个
#
function get_process_pid_by_name
{
if [ $# -ne 1 ];then
return 1
else
pids=ps -ef | grep $1 | egrep -v grep|grep -v $0 | awk ‘{print $2}‘
echo ${pids}
fi
}
#get_process_info_by_pid
#该函数是接收一个参数,参数进程PID;返回值是一进程运行信息的列表,其包含CPU 占用率 内存
#
function get_process_info_by_pid
{
if [ ps -ef | awk -v pid=$1 ‘$2==pid{print }‘ | wc -l -eq 1 ];then
pro_status="RUNNING"
else
pro_status="STOPED"
fi
pro_cpu=ps aux | awk -v pid=$1 ‘$2==pid{print $3}‘
pro_mem=ps aux | awk -v pid=$1 ‘$2==pid{print $4}‘
pro_start_time=ps -p $1 -o lstart | grep -v STARTED
#echo "${pro_status} ${pro_cpu} ${pro_mem} "${pro_start_time}" "
}
#is_group_in_config
#该函数接收一个参数,参数为组的名称;返回是0或1;0代表该组在配置文件中,1代表不在
#
function is_group_in_config
{
for gn in get_all_group;do
if [ "${gn}" == "$1" ];then
return
fi
done
echo "Group $1 is not in process.cfg"
return 1
}
#is_process_in_config
#该函数接收一个参数,参数为组名;返回值是对应组内所有进程名名称列表
#
function is_process_in_config
{
for pn in get_all_process;do
if [ $pn == $1 ];then
return
fi
done
}
#get_all_process_by_group
#该函数接收一个参数,参数为组的名称传给is_group_in_config返回的0列出该组内所有进程名
#
function get_all_process_by_group
{
is_group_in_config $1
if [ $? -eq 0 ];then
p_list=sed -n "/\[$1\]/,/\[.*\]/p" ${HOME_DIR}/${CONFIG_FILE} | egrep -v "(^$|^#|\[.*\])"
echo ${p_list}
else
echo "GroupName $1 is not in process.cfg"
fi
}
#get_group_by_process_name
#该函数接收一个参数,参数名是进程名;调用get_all_group得到组,get_all_process_by_group ${gn};判断是否在这个组内;若在到组名称
#
function get_group_by_process_name
{
for gn in get_all_group;do
for pn in get_all_process_by_group ${gn};do
if [ $pn == $1 ];then
echo "${gn}"
fi
done
done
}
#format_print
#该函数接收一个参数;参数是进程名,显示进程的ProcessName---------","GroupName-------","Status-----","PID----","CPU----","MEMORY----","StarTime---
#
function format_print
{
ps -ef | grep $1 | grep -v grep | grep -v $this_pid &> /dev/null
if [ $? -eq 0 ];then
pids=get_process_pid_by_name $1
for pid in $pids;do
get_process_info_by_pid $pid
awk -v name=$1 \
-v g_name=$2 \
-v status=$pro_status \
-v pid=$pid \
-v cpu=$pro_cpu \
-v mem=$pro_mem \
-v start_time="${pro_start_time}" \
‘BEGIN{printf "%-20s%-16s%-11s%-7s%-7s%-10s%-20s\n",name,g_name,status,pid,cpu,mem,start_time}‘
done
else
awk -v name=$1 -v g_name=$2 ‘BEGIN{printf "%-20s%-16s%-11s%-7s%-7s%-10s%-20s\n",name,name,"STOPED","NULL","NULL","NULL","NULL"}‘
fi
}
##
##
if [ ! -e ${HOME_DIR}/${CONFIG_FILE} ];then
echo "${CONFIG_FILE} is not exist..please check.."
exit 1
fi
##
##
awk ‘BEGIN{printf "%-20s%-16s%-10s%-6s%-7s%-10s%-20s\n","ProcessName---------","GroupName-------","Status-----","PID----","CPU----","MEMORY----","StarTime---"}‘
##
##
if [ $# -gt 0 ];then
if [ "$1" == "-g" ];then
shift
for gn in [email protected];do
is_group_in_config ${gn} || continue
for pn in get_all_process_by_group $gn;do
is_process_in_config $pn && format_print $pn $gn
done
done
else
for pn in [email protected];do
gn=get_group_by_process_name $pn
is_process_in_config $pn && format_print $pn $gn
done
fi
else
for pn in get_all_process;do
gn=get_group_by_process_name $pn
is_process_in_config $pn && format_print $pn $gn
done
fi
[[email protected] ~]#

原文地址:https://blog.51cto.com/14294148/2437357

时间: 2024-08-25 20:28:57

Linux shell 脚本 实现查询出进程的名字,cup内存占用率,启动时间在线状态等格式化输出的相关文章

linux shell脚本守护进程监控svn服务

最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在则启动. 创建监控脚本svnmonit.sh #! /bin/sh #进程名字可修改 PRO_NAME=svnserve PORT=58652 REP_DIR=/www/svndata while true ; do #用ps获取$PRO_NAME进程数量 NUM=`ps aux | grep ${

LINUX SHELL脚本攻略笔记[速查]

Linux Shell脚本攻略笔记[速查] 资源 shell script run shell script echo printf 环境变量和变量 pgrep shell数学运算 命令状态 文件描述符和重定向 cat 数组和关联数组 alias date 调试脚本 函数和参数 管道 读取命令输出 read 字段分隔符和迭代器 循环 比较和测试 find xargs tr md5sum sha1sum 对目录进行校验 sort uniq tempfile split bash变量匹配切分 exp

老李分享:《Linux Shell脚本攻略》 要点(八)

老李分享:<Linux Shell脚本攻略> 要点(八) 1.打印进程 [[email protected] program_test]# ps -e | head  PID TTY          TIME CMD    1 ?        00:00:03 init    2 ?        00:00:00 kthreadd    3 ?        00:00:00 migration/0    4 ?        00:00:00 ksoftirqd/0    5 ?   

LInux Shell 脚本笔记

*************************** list.txt : 目录 ******************************** 1. variable.sh2. condition.sh3. control.sh4. AndOr.sh5. statementBlock.sh6. function.sh7. command_1.sh8. old_version_set.sh9. new_version_set.sh10. command_2.sh11. command_3.s

shell 脚本实现的守护进程

转自:http://blog.csdn.net/cybertan/article/details/3235722 转自:http://blog.sina.com.cn/s/blog_4c451e0e0100giqg.html 设想:用一个shell查看一个后台运行的PHP程序是否非正常退出 如果退出,利用守护进程自动restart. 类似mysql的safe_mysqld 共3个程序 shstart.sh 负责启动 sh.sh 守护进程主程序 shstop.sh 安全退出守护进程和php程序主体

Linux shell 脚本实例【转】

1. 写一个脚本,利用循环计算10的阶乘#!/bin/shfactorial=1for a in `seq 1 10`do       factorial=`expr $factorial \* $a`doneecho "10! = $factorial" 2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值.直到用户输入"end"停止.#!/bin/shuns

Linux Shell脚本攻略(1.10)

1.10 获取.设置日期和延时 很多应用程序需要以不同的格式打印日期.设置日期和时间.根据日期和时间执行某项操作.延时通常用于在程序执行过程中提供一段等待时间(比如1秒).同样的,我们也能够一多种格式打印日期,或者在命令行中设置日期.在类Unix系统中,日期被存储为一个整数,其大小为自世界标准时间起所流逝的秒数.这种计时方式称为纪元时或Unix时间. 1.10.1 获取.设置时间 以下的程序给出了多种用法: #!/bin/bash start=$(date +%s) #获取纪元时间 date #

Linux shell脚本基础学习详细介绍(完整版)一

Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Linux 脚本编写基础◆1.1 语法基本介绍 1.1.1 开头 程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例子中我们使用/bin/sh来执行程序. 当编辑好脚本时,如果要执行该脚本,还必须使其可执行. 要使脚本可执

Linux shell脚本基础学习详细介绍(完整版)二

详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续. Linux shell脚本基础已经被分成好几个部分了,这里对控制流程的内容也就马上讲完了,这是最后一部分关于here document,这里举例稍微有点复杂,我们慢慢来分析这个复杂Linux shell脚本. 6. Here documents 当要将几行文字传递给一个命令时,here docu