shell编程实战之监控端口(80端口、443端口等)


本文摘自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服务,则应该出现信息。

阅读剩余部分

相关阅读 >>

linux服务器被黑客入侵后处理

windows服务器安全设置总结

解析如何在apache服务器下设置url访问中文编码

修改linux服务器默认远程22端口

服务器为什么用linux系统?

centos 下搭建ftp服务器

devstack的安装步骤与使用

linux服务器下如何查看mysql安装信息的详细介绍

两种liunx 修改服务器时间的方式

教你如何用linux设置服务器自动重启

更多相关阅读请进入《服务器》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...