运维项目日记:系统监控脚本 V1.0
项目名称:Linux系统服务监控与自动化修复套件
版本:V1.0(基础功能版)
完成日期:2025年6月21日
开发周期:约3天
🎯 项目目标
构建一个能够自动监控关键系统服务状态,并在异常时提供修复选项的Python脚本。
核心需求:
- 定时检查预设服务的运行状态(Nginx, MySQL, SSH, Cron)
- 提供清晰的状态报告(命令行 + HTML格式)
- 实现异常服务的自动重启尝试
- 支持定时自动化执行(Cron)
🔧 技术实现
1. 核心架构
python
# 三层次设计
service_monitor.py
├── 检测层 (check_service)
├── 修复层 (restart_service)
└── 报告层 (generate_html_report)
2. 关键技术点
- 服务状态检测:
systemctl is-active命令调用 - 子进程管理:Python
subprocess模块的安全调用 - 异常处理:
try-except捕获命令执行异常 - 定时调度:Cron任务配置与路径管理
- 报告生成:HTML模板与动态内容填充
3. 代码亮点
python
# 智能重启逻辑
if not check_service(service_name):
user_input = input("是否尝试自动修复?(y/N): ")
if user_input == 'y':
restart_service(service_name)
# 二次验证确保重启成功
📊 功能特性清单
| 功能模块 | 状态 | 说明 |
|---|---|---|
| 基础监控 | ✅ 完成 | 检查4个核心服务状态 |
| 状态报告 | ✅ 完成 | 命令行彩色输出 + HTML报告 |
| 自动修复 | ✅ 完成 | 交互式重启异常服务 |
| 定时执行 | ✅ 完成 | 配置Cron每5分钟检查 |
| 日志记录 | ✅ 完成 | 输出重定向到日志文件 |
🚀 实际运行效果
控制台输出示例:
text
🔍 服务状态检查报告
========================================
nginx ✅ 运行中
mysql ❌ 已停止
ssh ✅ 运行中
cron ✅ 运行中
⚠️ 发现 1 个服务异常: mysql
是否要尝试自动修复?(y/N): y
🔄 尝试重启服务: mysql
✅ 成功重启服务: mysql
HTML报告:
- 生成美观的网页格式报告
- 不同服务状态用颜色区分
- 包含时间戳和详细状态信息
📝 遇到的问题与解决
-
Cron环境问题
- 现象:Cron任务找不到
python3命令 - 解决:使用绝对路径
/usr/bin/python3 - 原理:Cron的PATH环境变量与用户终端不同
- 现象:Cron任务找不到
-
权限问题
- 现象:重启服务需要sudo权限
- 解决:配置sudo免密码执行特定命令
- 注意:生产环境需谨慎配置权限
-
编辑器切换
- 现象:
crontab -e默认打开Vim - 解决:设置
EDITOR环境变量为nano/micro - 命令:
export EDITOR=/usr/bin/micro
- 现象:
🎖️ 项目收获
技术层面:
- 掌握了Python与Linux系统服务的交互方法
- 理解了Cron定时任务的工作原理和配置要点
- 学会了编写具有实际用途的运维脚本
思维层面:
- 建立了“检测-报告-修复”的监控闭环思维
- 理解了自动化工具的价值:解放人力,提高效率
- 培养了从用户角度设计工具交互的习惯
📈 下一版本计划(V2.0)
计划新增功能:
- 邮件/短信告警:服务异常时自动发送通知
- 历史趋势分析:记录服务状态变化,生成趋势图
- Web仪表盘:实时显示多台服务器的服务状态
- 配置化管理:通过配置文件添加/删除监控服务
- 性能监控:监控服务资源使用(CPU、内存)
💭 项目感想
“这个项目让我真正体会到‘用代码解决实际问题’的乐趣。从最初的只能手动检查服务,到现在的全自动监控,效率提升了不止十倍。最让我自豪的不是代码本身,而是这个工具真的能在日常工作中发挥作用——它不会累,不会忘,始终在后台默默守护着系统的健康。”
最大的领悟:最好的运维工具,往往是运维人员为自己量身定做的工具。
项目地址:https://gitee.com/babylonyao/my-linux-scripts
版本:Service Monitor V1.0