Linux 系统监控脚本实战:磁盘空间预警、Web 服务与访问测试全流程
Linux 系统监控脚本实战:磁盘空间预警、Web 服务与访问测试全流程
在 Linux 系统运维中,自动化监控是保障服务稳定运行的关键。本文将基于实际需求,详细讲解三个实用监控脚本的实现过程,包括磁盘空间预警、Web 服务自动恢复及访问状态检测,适合运维新手快速掌握系统监控自动化技巧。
一、磁盘空间监控与邮件报警
需求分析
每日检查系统根目录剩余空间,当剩余空间小于 20G 时,自动发送报警邮件给管理员。
实现步骤
1. 安装邮件服务
首先需要安装mailx
工具用于发送邮件:
[root@server ~]# yum install mailx -y
2. 配置 SSL 证书(以 QQ 邮箱为例)
邮件服务需配置 SSL 证书确保安全传输:
# 创建证书目录
[root@server ~]# mkdir -p /root/.certs
[root@server ~]# cd /root/.certs# 提取QQ邮箱SMTP服务器证书
[root@server .certs]# echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt# 导入证书
[root@server .certs]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@server .certs]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@server .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
3. 配置邮件服务参数
编辑/etc/mail.rc
文件配置:
[root@server ~]# vim /etc/mail.rc
# 在文件末尾添加以下内容
set from=143****435@qq.com # 邮箱
set smtp=smtps://smtp.qq.com:465 # SMTP服务器地址及端口
set smtp-auth-user=143****435@qq.com # 认证用户名
set smtp-auth-password=st******osgeifia # 邮箱授权码
set smtp-auth=login
set nss-config-dir=/root/.certs/ # 证书存放路径
set ssl-verify=ignore # 启用加密ssl传输
注意:部分系统需使用
wq!
强制保存配置文件。
4. 编写磁盘监控脚本
创建disk1.sh
脚本实现空间检查逻辑:
[root@server ~]# vim disk1.sh
#!/bin/bash
# 功能:检查根目录剩余空间,小于20G时发送报警邮件# 获取根目录剩余空间(单位:MB)
disk=$(df -m | grep -w / | tr -s " " | cut -d " " -f4)# 判断是否小于20000MB(20G)
if (($disk < 20000))
thenecho "Warning: disk space less than 20G" | mail -s "磁盘空间告警" 143****435@qq.com
fi
5. 设置定时任务
通过crontab
配置每日自动执行:
[root@server ~]# vim /etc/crontab
# 添加以下内容(每天0点执行)
0 0 * * * root /bin/bash /root/disk1.sh
二、Web 服务(Nginx)自动监控与恢复
需求分析
通过进程检查和端口监听两种方式判断 Nginx 是否运行,若未运行则自动启动服务并配置防火墙规则。
实现步骤
1. 确保防火墙服务运行
[root@master ~]# systemctl enable --now firewalld # 开机自启并立即启动
[root@master ~]# systemctl status firewalld # 检查状态
2. 编写服务监控脚本
创建check_service.sh
脚本实现服务监控与自动恢复:
[root@master ~]# vim check_service.sh
#!/bin/bash
# 功能:检查Nginx运行状态,未运行则启动并配置防火墙# 通过进程数判断Nginx是否运行
ps_num=$(ps -ef | grep -c [n]ginx)if (($ps_num > 0))
thenecho "nginx is already running"
elseecho "nginx not started, Waitting..."yum install nginx -y &>/dev/null# 启动服务systemctl start nginx# 配置防火墙允许HTTP服务(80端口)firewall-cmd --permanent --zone=public --add-service=http &>/dev/nullfirewall-cmd --permanent --zone=public --add-port=80/tcp &>/dev/null# 重新加载防火墙规则firewall-cmd --reload &>/dev/nullecho "nginx is already running!!!"
fi
测试:
[root@master ~]# bash check_service.sh # 执行测试
nginx not started,Waiting...
nginx is already running!!!
[root@master ~]# systemctl status nginx
● nginx.service - The nginx HTTP and reverse proxy serverLoaded: loaded (/usr/lib/systemd/system/nginx.service; disa>Active: active (running) since Fri 2025-08-01 15:00:10 CST;>Process: 3267 ExecStartPre=/usr/bin/rm -f /run/nginx.pid (co>Process: 3269 ExecStartPre=/usr/sbin/nginx -t (code=exited, >Process: 3272 ExecStart=/usr/sbin/nginx (code=exited, status>Main PID: 3275 (nginx)Tasks: 3 (limit: 21404)Memory: 3.9MCGroup: /system.slice/nginx.service├─ 3275 "nginx: master process /usr/sbin/nginx"├─ 3276 "nginx: worker process"└─ 3277 "nginx: worker process"[root@master ~]# netstat -lntup | grep -w tcp | grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3275/nginx: master
两种状态检查方式说明
- 进程检查:通过
ps -ef | grep [n]ginx
过滤进程,-c
参数统计数量 - 端口检查:使用
netstat -lntup | grep 80
确认 80 端口是否被监听(Nginx 默认端口)
三、Web 服务访问状态检测
需求分析
使用curl
命令访问 Web 服务,若正常访问返回 “web server is running”,否则返回状态码 12。
实现步骤
1. 编写访问检测脚本
创建check_web.sh
脚本实现访问测试逻辑:
[root@master ~]# vim check_web.sh
#/bin/baship=$(ip a | grep ens32 | grep inet | cut -d / -f1 | cut -d " " -f6)
curl $ip &> /dev/null
if (($?==0))
thenecho "web servers is running!"
elseecho "web not accessible"exit 12
fi
2. 测试
[root@master ~]# bash check_web.sh
web servers is running!
总结
本文通过三个实用脚本实现了 Linux 系统的基础监控需求:
- 磁盘空间不足时自动报警,保障系统存储稳定性;
- Web 服务异常时自动恢复并配置防火墙,减少人工干预;
- 定期检测服务可访问性,及时发现上层应用问题。
实际运维中可根据需求扩展,例如替换为 Apache 服务、调整磁盘阈值或增加日志记录功能,进一步提升监控的全面性和可靠性。