本文摘自PHP中文网,作者齐天大圣,侵删。
一般企业用的服务器上面都会跑各种服务,比如nginx、php、mysql、redis、MongoDB等等。一般系统的运行可能会需要多个服务的配合,比如我司的系统需要php、mysql、redis、apache、MongoDB服务。这些服务缺一不可。所以我们要实时监控这些服务,如果发现有服务出现异常,需要立即告警。这里我们不打算通过进程名来判断服务的状态。我们打算通过端口的监听来判断服务的运行状态。
linux服务器上有一个命令可以用来查看端口状态:netstat。但是在centOS7上,需要先安装net-tools工具,才有这个命令。已经安装这个工具包后,我们来使用netstat命令,看看它会显示哪些信息
1 2 3 4 5 6 7 8 9 10 | # netstat -tlnp
Active 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命令,过滤掉第一行以及第二行
1 2 3 4 5 6 7 8 | # netstat -tlnp | grep tcp
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
|
然后再通过awk命令获取第四列的信息。
1 2 3 4 5 6 7 8 | # netstat -tlnp | grep tcp | awk '{print $4}'
127.0.0.1:6379
0.0.0.0:80
0.0.0.0:22
127.0.0.1:88
0.0.0.0:443
127.0.0.1:27017
0.0.0.0:3306
|
最后再通过cut命令获取到端口号。
1 2 3 4 5 6 7 8 | # netstat -tlnp | grep tcp | awk '{print $4}' | cut -d: -f2
6379
80
22
88
443
27017
3306
|
通过上面的操作,我们能获取目前服务器端口的情况,然后我们将需要运行服务的端口存放在数组中,然后遍历该数组和拿到的这些信息做对比。
1 2 3 4 5 6 | ports= "80 88 443 3306 6379 27017"
for port in $ports
do
echo $port
done
|
遍历这些需要监听的端口后,我们来将端口与netstat获取到的信息作对比。我们这里用grep命令来做判断。下面我们给出完整的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/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 $ports
do
flag=$( echo $netstat_info | grep $port )
if [ -z "$flag" ];then
echo "$port is dead"
fi
done
|
对于端口监控的脚本编写还是很容易的。下面我们来测试下该脚本是否能正常监控端口。所有服务都正常的情况下,执行该脚本不会输出任何信息。如果关闭了nginx服务,则应该出现信息。
首先,所有服务都正常的情况下,执行脚本
现在我们来主动关闭nginx服务,然后再来运行该脚本,查看会出现什么信息
1 2 3 4 5 | # /etc/init.d/nginx stop
Stoping nginx... done
# ./port.sh
80 is dead
443 is dead
|
由此得知,该脚本能正常监控服务器端口情况。日常工作中,经常将上述脚本和定时任务以及告警程序一起使用。将此脚本发到定人任务去,没分钟执行一次,当发现指定端口没有被监听,则触发告警程序。
以上就是shell编程实战之监控端口(80端口、443端口等)的详细内容,更多文章请关注木庄网络博客!
相关阅读 >>
linux怎么启动服务器
两种liunx 修改服务器时间的方式
关于使用阿里云ecs服务器的实例教程
linux服务器重启命令是什么
linux服务器上启动tomcat出现乱码
解析如何在apache服务器下设置url访问中文编码
shell编程实战之监控端口(80端口、443端口等)
如何查看linux服务器的内存使用情况
apache服务器有什么特点
服务器编程中对于文件的操作详解
更多相关阅读请进入《服务器》频道 >>
转载请注明出处:木庄网络博客 » shell编程实战之监控端口(80端口、443端口等)