日期:2025/11/25 学习主题:创建Linux系统服务监控脚本
📌 今日目标
学习使用Python监控Linux系统服务的运行状态,创建一个能自动检查Nginx、MySQL、SSH等关键服务是否正常的工具脚本。
🔧 使用的技术与工具
- 操作系统:WSL (Ubuntu)
- 编程语言:Python 3
- 关键命令:
systemctl is-active - 编辑器:micro
- 版本控制:Git
📝 代码实现过程
1. 核心功能函数:check_service()
python
def check_service(service_name):
try:
result = subprocess.run(
['systemctl', 'is-active', service_name],
capture_output=True,
text=True,
check=True
)
return result.stdout.strip() == 'active'
except subprocess.CalledProcessError:
return False
我学到的知识点:
subprocess.run()可以让Python执行系统命令systemctl is-active是检查服务状态的标准命令capture_output=True能捕获命令输出结果- 异常处理很重要,服务不存在时返回False而不是让程序崩溃
2. 服务列表配置
python
SERVICES_TO_MONITOR = ['nginx', 'mysql', 'ssh', 'cron']
设计思路:使用常量列表定义要监控的服务,方便后续添加或修改。
3. 主监控逻辑
python
problematic_services = []
for service in SERVICES_TO_MONITOR:
is_running = check_service(service)
status = "✅ 运行中" if is_running else "❌ 已停止"
print(f"{service:15} {status}")
if not is_running:
problematic_services.append(service)
编程技巧:
- 使用列表收集问题服务,便于后续处理
- 字符串格式化 (
{service:15}) 让输出对齐更美观 - 三元运算符让代码更简洁
🎯 实际运行结果
text
🔍 服务状态检查报告
========================================
nginx ✅ 运行中
mysql ❌ 已停止
ssh ✅ 运行中
cron ✅ 运行中
⚠️ 发现 1 个服务异常: mysql
发现的问题:MySQL服务没有运行,需要手动启动。
💡 收获与心得
- 自动化思维:手动检查服务状态很繁琐,用脚本自动化后效率大大提升
- Python与系统交互:学会了如何在Python中执行Linux命令并处理结果
- 实用价值:这个脚本可以在服务器维护中实际使用,监控关键服务
- 错误处理:意识到生产环境脚本必须有良好的异常处理机制
🚀 下一步计划
- 添加自动重启故障服务的功能
- 设置定时任务,让脚本自动定期运行
- 添加邮件或短信告警功能
- 学习使用
systemctl restart命令实现自动修复
📚 总结
今天成功创建了第一个有实用价值的运维脚本。从理论学习到实际编码,最终完成了一个能真实监控系统服务的工具。这让我对Python在运维工作中的实际应用有了更深刻的理解。
-
日期:2025/11/25
-
我发现:Cron定时任务需要使用绝对路径
-
问题:为什么在终端能运行的
python3在Cron中就不行? -
原因:Cron的环境变量
PATH非常有限,找不到python3命令 -
解决方案:使用绝对路径
/usr/bin/python3 -
学到的知识点:
- Linux命令可以通过
which或whereis查找完整路径 - 不同的执行环境可能有不同的环境变量设置
- 在自动化任务中,使用绝对路径更可靠
- Linux命令可以通过