当前位置: 首页 > news >正文

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 系统的基础监控需求:

  1. 磁盘空间不足时自动报警,保障系统存储稳定性;
  2. Web 服务异常时自动恢复并配置防火墙,减少人工干预;
  3. 定期检测服务可访问性,及时发现上层应用问题。

实际运维中可根据需求扩展,例如替换为 Apache 服务、调整磁盘阈值或增加日志记录功能,进一步提升监控的全面性和可靠性。

http://www.lryc.cn/news/606637.html

相关文章:

  • ACM SIGCOMM 2024论文精选-01:5G【Prism5G】
  • 数据处理--生成Excel文档
  • 18.若依框架中的xss过滤器
  • 南太平洋金融基建革命:斐济-巴新交易所联盟的技术破局之路 ——从关税动荡到离岸红利,跨境科技如何重塑太平洋资本生态
  • 基于html,css,jquery,django,lstm,cnn,tensorflow,bert,推荐算法,mysql数据库
  • 元策联盈:深耕金融领域,赋能行业发展​
  • Apache RocketMQ for AI 战略升级,开启 AI MQ 新时代
  • 视频生成中如何选择GPU或NPU?
  • 《C++初阶之STL》【stack/queue/priority_queue容器适配器:详解 + 实现】(附加:deque容器介绍)
  • Eclipse中导入新项目,右键项目没有Run on Server,Tomcat的add and remove找不到项目
  • Apache RocketMQ 中 Producer(生产者)的详细说明
  • vivado扫描:synth_1 ​ 和 ​Out-of-Context (OOC) Modules Runs​ 的区别(腾讯元宝)
  • Apache RocketMQ 中 Consumer(消费者)的详细说明
  • 超越 ChatGPT:智能体崛起,开启全自主 AI 时代
  • 在VScode里运行并调试C++程序
  • 3-verilog的使用-1
  • 建造者模式及优化
  • 代码随想录刷题Day22
  • 校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)
  • JavaScriptAJAX异步请求:XHR、Fetch与Axios对比
  • Trice移植(Start with Trice)
  • 【iOS】retain/release底层实现原理
  • CMake set_source_files_properties使用解析
  • 15. 若依框架的Security Config
  • 微服务消息队列之RabbitMQ,深入了解
  • Docker状况监控
  • 加密与安全
  • Idea集成Jenkins Control插件,在IDEA中触发Jenkins中项目的构建
  • LLM Prompt与开源模型资源(2)提示工程关键技术
  • GaussDB 数据库设计规范