侧边栏壁纸
  • 累计撰写 211 篇文章
  • 累计创建 16 个标签
  • 累计收到 5 条评论

目 录CONTENT

文章目录

【Linux】巡检脚本的编写

Wake
2022-12-02 / 0 评论 / 0 点赞 / 764 阅读 / 913 字

【需求】

编写一个巡检脚本,用来检测系统里面所有服务是否都正常运行。假定,系统运行的服务有Nginx、MySQL、Redis、Tomcat。要求脚本有内容输出,可以明确告知服务是否正常运行。

提示:

如果服务进程存在并且端口监听说明服务正常。
Nginx端口443
MySQL端口3306
Redis端口6379
Tomcat端口8825
进程是否存在使用 ps aux |grep ‘xxx’
端口是否存在使用 netstat -lnp |grep ‘xxxx’

【解析】

这脚本看起挺热闹,其实非常简单

只需要搞清楚如何确认进程在不在、端口在不在即可

查看一个进程在不在使用:
ps aux|grep ‘xxx’
这是核心命令

先举例子吧

ps aux |grep systemd
image-1669975857893
这样可以查看所有包含systemd关键词的进程,但是有一点要注意啊

最后一行,可不是systemd的进程,而是grep的进程,因为我们的命令里有grep

所以,你最好是将grep给排除掉
image-1669975921812
这样就准确了

所以,检测nginx进程在不在,就用

ps aux |grep nginx |grep -v grep

最终,我们判断一个进程在不在,还需要计算一下这个命令的输出有几行

ps aux |grep nginx |grep -v grep |wc -l

将其赋值到一个变量里,再针对变量进行数字比对即可

在这,我再给大家分享一个查看进程在不在的方法

pgrep  systemd

image-1669975997433
这个命令可以查看指定进程的ID,你可以对比上面的截图看看,是不是和ps出来的进程一样呢,而且这样更加准确了,这个一定是systemd进程

再来看端口

netstat -lnp

它是查看系统监听端口的命令

所以查看443端口在不在,可以这样操作

netstat -lnp |grep 443

看它有没有输出结果

当然,这个不一定准确

比如有一个1443的监听端口,你用上面的命令也能匹配到

所以,这里需要额外加一个修饰

netstat -lnp |grep ':443 '

也就是在端口号前面加个:后面加个空格,这样就精准了

脚本中还有一个地方,只有进程和端口都没有问题,才算服务正常

所以判断的时候要注意一下

另外,如果没有netstat,使用ss也可以,用法意义

ss -lnp|grep ':443 '

脚本如下:

#!/bin/bash
#检查程序是否还在
check_ps()
{ 
if  pgrep "$1" &>/dev/null
then
return 0
else
return 1
fi
}
#检查端口是否存活
check_port()
{
if ! which netstat &>/dev/null
then
echo "netstat 命令不存在,自动安装."
        yum install -y net-tools
if [ $? -ne 0 ]
then
echo "netstat命令安装失败,使用ss"
            ln -s /usr/sbin/ss  /bin/netstat
fi
fi
    port_n=`netstat -lnp|grep ":$1 "|wc -l`
if [ $port_n -ne 0 ]
then
return 0
else
return 1
fi
}
#最后检查两项,判断服务是否正常
check_srv()
{
if check_ps $1 && check_port $2
then
echo "$1服务正常"
else
echo -e "\e[1;31m "$1服务不正常,请检查!" \e[1;0m"
fi
}


check_srv nginx 443
check_srv mysql 3306
check_srv redis  6379
check_srv java  8825

补充:

1)要考虑netstat命令不存在的情况,不存在需要安装net-tools工具,安装不上就使用ss,ss用法和netstat基本一样
2)tomcat进程是java

0

评论区