千家信息网

shell编程实战之如何监控端口

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,小编给大家分享一下shell编程实战之如何监控端口,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一般企业用的服务器上面都会
千家信息网最后更新 2025年12月02日shell编程实战之如何监控端口

小编给大家分享一下shell编程实战之如何监控端口,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

一般企业用的服务器上面都会跑各种服务,比如nginx、php、mysql、redis、MongoDB等等。一般系统的运行可能会需要多个服务的配合,比如我司的系统需要php、mysql、redis、apache、MongoDB服务。这些服务缺一不可。

所以我们要实时监控这些服务,如果发现有服务出现异常,需要立即告警。这里我们不打算通过进程名来判断服务的状态。我们打算通过端口的监听来判断服务的运行状态。

linux服务器上有一个命令可以用来查看端口状态:netstat。但是在centOS7上,需要先安装net-tools工具,才有这个命令。已经安装这个工具包后,我们来使用netstat命令,看看它会显示哪些信息

# netstat -tlnpActive Internet connections (only servers)Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      11213/redis-server  tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1556/nginx: master  tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      984/sshd            tcp        0      0 127.0.0.1:88            0.0.0.0:*               LISTEN      17446/httpd         tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1556/nginx: master  tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      25859/mongod        tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      7138/mysqld

上面显示的信息,不管是端口6379的redis,还是3306的mysql等等,都是运行我司系统必须的服务。然后,我们通过grep命令,过滤掉第一行以及第二行

# netstat -tlnp | grep tcptcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      11213/redis-server  tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1556/nginx: master  tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      984/sshd            tcp        0      0 127.0.0.1:88            0.0.0.0:*               LISTEN      17446/httpd         tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      1556/nginx: master  tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      25859/mongod        tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      7138/mysqld

然后再通过awk命令获取第四列的信息。

# netstat -tlnp | grep tcp | awk '{print $4}'127.0.0.1:63790.0.0.0:800.0.0.0:22127.0.0.1:880.0.0.0:443127.0.0.1:270170.0.0.0:3306

最后再通过cut命令获取到端口号。

# netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f26379802288443270173306

通过上面的操作,我们能获取目前服务器端口的情况,然后我们将需要运行服务的端口存放在数组中,然后遍历该数组和拿到的这些信息做对比。

ports="80 88 443 3306 6379 27017"for port in $portsdo    echo $portdone

遍历这些需要监听的端口后,我们来将端口与netstat获取到的信息作对比。我们这里用grep命令来做判断。下面我们给出完整的代码:

#!/bin/bash# 监控服务器端口情况export LANG=en ports="80 88 443 3306 6379 27017"netstat_info=$(netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f2)for port in $portsdo    flag=$(echo $netstat_info | grep  $port)    if [ -z "$flag" ];then        echo "$port is dead"    fidone

对于端口监控的脚本编写还是很容易的。下面我们来测试下该脚本是否能正常监控端口。所有服务都正常的情况下,执行该脚本不会输出任何信息。如果关闭了nginx服务,则应该出现信息。

首先,所有服务都正常的情况下,执行脚本

# ./port.sh # #不会有任何信息出现

现在我们来主动关闭nginx服务,然后再来运行该脚本,查看会出现什么信息

# /etc/init.d/nginx stopStoping nginx...  done# ./port.sh 80 is dead443 is dead

由此得知,该脚本能正常监控服务器端口情况。日常工作中,经常将上述脚本和定时任务以及告警程序一起使用。将此脚本发到定人任务去,没分钟执行一次,当发现指定端口没有被监听,则触发告警程序。

以上是shell编程实战之如何监控端口的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

服务 端口 信息 脚本 监控 命令 情况 服务器 运行 状态 系统 监听 实战 编程 任务 内容 工具 数组 程序 篇文章 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 服务器断开连接怎么恢复 网络安全事故由哪里认定 石化行业网络安全防护方案价格 深圳富士康有软件开发部门吗 怀旧服副本战场服务器 uos系统连接服务器共享文件夹 自考计算机网络技术复习 管家婆单机版怎么导出数据库 坚持把网络安全无小事 密云区数据网络技术咨询 联想r260服务器 数据库水厂管理系统课程设计 山东弘度互联网科技公司怎么样 ibm服务器管理口缺省ip 检察院网络安全检查报告 宜宾字节互联网科技有限公司招聘 海事网络安全 杭州溢远网络技术的地址 服务器管理口碑好 青岛华晨软件开发公司 宁波公安局网络安全支队 服务行业的软件开发 易语言数据库文件打开失败 更改无线网络服务器代理 华为服务器网卡 交通网络安全和信息化建设 密云区数据网络技术咨询 怎样新建数据库作业 足疗仪软件开发公司 杭州溢远网络技术的地址
0