实战:一个脚本实现统计linux进程相关的信息

Posted 互联网老辛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实战:一个脚本实现统计linux进程相关的信息相关的知识,希望对你有一定的参考价值。

文章目录

公司任务

王同学刚刚入职,就被安排了一项任务,据说还比较紧急。
公司一共有200多台服务器,要求王同学统计一下每台服务器的IP,以及各个进程的数量。

王同学刚刚手工查询了10台就打退堂鼓了,这一条条的命令干下去得加班到几点。

这时候一个念头突然闪现在王同学的脑海里: 一切自动化都是以手工能实现为基础的,那我现在已经能够手工实现了,是否可以试试自动化呢?

说干就干,不服就直接上脚本

脚本思路

我们在这个脚本中,统计如下信息:

  1. 总进程的数量
  2. running的进程数
  3. stoped 进程数量
  4. sleeping 进程的进程数
  5. zombie进程的进程数

这里面应该还包括服务器的IP,每台服务器执行这个脚本,我们可以用ansible批量分发,然后执行完成后进行收集,或者直接导入某个文件中进行数据处理。

脚本源码及写作过程

在脚本中我们先定义各类需要统计的进程数变量,比如running表示正在运行的进程, sleeping表示睡眠中的进程。

使用for循环遍历,然后用case语句进行承接
没遍历出对应的编号记录,就在当前的case分支里加1,最后统计进程的结果即可

统计 Linux 进程相关数量信息
#!/bin/bash
# 统计 Linux 进程相关数量信息
running=0
sleeping=0
stoped=0
zombie=0
# 在 proc 目录下所有以数字开始的都是当前计算机正在运行的进程的进程
PID
# 每个 PID 编号的目录下记录有该进程相关的信息
for pid in /proc/[1‐9]*
do
 procs=$[procs+1]   ## 每次循环加1
 stat=$(awk 'print $3' $pid/stat)
# 每个 pid 目录下都有一个 stat 文件,该文件的第 3 列是该进程的状态信case $stat in
 R)
 ## running进程
 running=$[running+1]
 ;;
 T)
 ## stoped进程
 stoped=$[stoped+1]
 ;;
 S)
 sleeping=$[sleeping+1]
 ;;
 Z)
 ## 僵尸进程
 zombie=$[zombie+1]
 ;;
 esac
done
echo "进程统计信息如下"
echo "总进程数量为:$procs"
echo "Running 进程数为:$running"
echo "Stoped 进程数为:$stoped"
echo "Sleeping 进程数为:$sleeping"
echo "Zombie 进程数为:$zombie"

执行测试

测试结果如图:

这里面好像少了IP, 于是把IP添加上:
ip=ifconfig |grep inet |awk 'print $2'

通过这个命令,可以直接获取到IP地址,并输出到屏幕上,接下来就是使用ansible进行批量分发了。

又遇到问题

王同学没有学过ansible,临时学也不赶趟,有没有不适用ansible进行分发的方法

于是王同学向我请教

问题解决

这里我们其实可以使用ssh进行分发,不使用ansible
操作步骤如下:

  1. 创建一个文件,里面写上要分发的服务器IP地址
  2. 写一个脚本遍历这些IP,然后做一个SSH免密钥登录
  3. 最后在脚本里SCP给每台服务器对应的IP分发到B服务器
  4. 在脚本中加入执行完的结果要导入到本地的某个文件中
  5. 在用scp命令拷贝回A服务器的特定路径
  6. 最后在A服务器写个脚本对拷贝过来的200个文件进行处理

所以到这里问题就变成了如何将目录下多个文件合并成一个文件。

我们其实使用一条命令就能搞定:

find ./ -name *.txt |xargs cat > total.txt

这种方式没有添加换行符,有时候看起来比较难受。 如果需要使用换行符的话可以用下面的命令

设置换行符为 ^J

find ./ -name *.txt |xargs sed ‘a^J’ > total.txt

到这里我们的问题就解决了。

总结

其实你会看到,我们在写脚本的过程中,并不是一次写好的,而是解决好一个问题,同时伴随着出现另一个问题, 这时候我们在解决第二个问题。

直到全部解决后,在考虑是否要优化脚本。

很多小伙伴没有优化的习惯,因为大多数时候我们写完脚本,去完成了工作,也就把脚本放在一边了,如果你想跟深入的提高自己的能力,一定要对脚本进行优化。

以上是关于实战:一个脚本实现统计linux进程相关的信息的主要内容,如果未能解决你的问题,请参考以下文章

实战:一个脚本实现统计linux进程相关的信息

Linux之shell脚本实战统计 Linux 进程相关数量信息

统计 Linux 进程相关数量信息

Linux九阴真经之无影剑残卷8(进程和计划任务2)

linux下监测进程是否存在

Linux系统shell脚本之用户管理脚本实战