网站首页 > 精选教程 正文
提醒:本文为合集文章,后续会持续更新!
关注我,持续学习shell脚本,每日提升!
【需求】
编写一个巡检脚本,用来检测系统里面所有服务是否都正常运行。假定,系统运行的服务有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
这样可以查看所有包含systemd关键词的进程,但是有一点要注意啊
最后一行,可不是systemd的进程,而是grep的进程,因为我们的命令里有grep
所以,你最好是将grep给排除掉
这样就准确了
所以,检测nginx进程在不在,就用
ps aux |grep nginx |grep -v grep
最终,我们判断一个进程在不在,还需要计算一下这个命令的输出有几行
ps aux |grep nginx |grep -v grep |wc -l
将其赋值到一个变量里,再针对变量进行数字比对即可
在这,我再给大家分享一个查看进程在不在的方法
pgrep systemd
这个命令可以查看指定进程的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 "$1服务不正常"
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
感谢阅读,关注“阿铭linux”
持续为你输出高质量Linux技术文档!
猜你喜欢
- 2024-10-09 NGINX双证书(RSA与ECC)部署 nginx cer证书
- 2024-10-09 CentOS7 - 安装NGINX作为负载平衡器
- 2024-10-09 请求头的真正较量之Nginx与下划线
- 2024-10-09 理解Kubernetes中的Nginx Ingress
- 2024-10-09 适合ingress-nginx接入外部负载均衡的部署
- 2024-10-09 给软路由装个漂漂亮亮的控制台 架设软路由
- 2024-10-09 《蹲坑学K8S》之19-5:二进制部署Calico网络
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)