在运维工作中,为了保证业务的正常运行,需要定期检查指定流程是否仍然存在。一旦流程退出,服务中可能会出现问题,运维工程师可以第一时间处理。今天,我将与大家分享一个实用的shell脚本——时刻检查你的进程状态.
在监控一个进程时,我们通常需要获取进程的ID,这是进程的唯一标识符,但有时服务器上可能会有多个进程在不同的用户下运行相同的进程名。
下面的函数GetPID给出了在指定用户下获取指定进程名的进程ID的函数(目前该用户下只考虑启动一个具有该进程名的进程)。它有两个参数:用户名和进程名。它首先用ps找到流程信息,同时通过grep过滤出需要的流程,最后用sed和awk找到需要的流程的ID值(这个函数可以根据实际情况修改,比如过滤其他信息等。).
对进程进行监控
函数GetPID #用户#名称
{
PsUser=1美元
PsName=$2
PID=` PS-u $ PSUSer | grep $ PSname | grep-v grep | grep-v VI | grep-v dbxn
|grep -v尾部|grep -v开始|grep -v停止| sed-n 1p | awk“{ print $ 1 }”'
echo $pid
}
示例演示:
1、源程序(例如查找用户为 root,进程名为 TestApp 的进程 ID)
PID=`GetPID根TestApp `
回声$PID
2、结果输出
11426
[dyu@xilinuxbldsrv shell]$
3、结果分析
从上面的输出可以看出,11426是根用户下TestApp程序的进程ID。
4、命令详解
1)ps:检查系统中的瞬时过程信息。参数:
-u用户标识列出了属于该用户的程序的状态,也可以使用用户名指定。
-p进程标识指定进程标识并列出进程的状态。
-o指定输出格式。
2)grep:用于查找文件中与字符串匹配的当前行。参数:
-v反向选择,即显示无‘搜索字符串’内容的行。
3)sed:是非交互式文本编辑器,在编辑文件或标准输入输出文件时,一次只能处理一行内容。参数:
-n读取下一个输入行,并使用下一个命令而不是第一个命令处理新行。
p标记打印匹配线
4)awk:Linux/UNIX下处理文本和数据的编程语言。除了在命令行上使用之外,它更多地用作脚本。参数:
-f fsor字段分隔符fs:指定输入文件的分隔符,fs是字符串或正则表达式,如-F:
PS:有时这个过程可能不会开始。以下功能是检查流程标识是否存在。如果流程没有运行输出:
流程不存在。
#检查流程是否存在。
if [ '-$PID'=='-' ]
然后
{
回声“进程不存在。”
}
船方不负担装货费用
也是运维。为什么优秀的同学是月入2w,而你是天天米汤?因为.
一个优秀的运维不仅要勇敢善战在一线,还要面对运维事故。我们还需要实现对业务系统的实时监控,防止运维事故的发生。
在运维事故中,我可以战斗到底,不惧生死,但这么多不确定因素,真的太难防患于未然了~
其实,月入2w与你只差一个全方位的监控系统!
推荐一个实用运维工具——王教授。不仅可以接入多来源的各式监控汇聚一图展示,还可对资源使用中出现的异常、未来可能出现的风险以告警的形式手机通知到个人,最大程度减小了运维事故的发生。
绑定云账号AcessKey随时查看到账户下所有资产状况,获取及时的云资源变化情况、问题提醒。
服务器 CPU 使用率偏
云数据库存在慢查询
“掌握”全局监控,进阶高级运维!有需要的运维同学欢迎点击文末王教授二维码查看详情!
网站崩溃找不到原因?平台搭建无从下手?热门技术不想落伍?想要变强找不到资料?
加入[IT拯救联盟],让大牛和同伴拯救你,带你装x带你飞。定期干货分享、大牛专业解答、实用IT工具优选…..