API 设计与 RESTful 最佳实践

爪 爪
爪 爪
爪 爪
编辑
16
文章
0
粉丝
信息安全11104字数 536阅读1分47秒阅读模式
AI智能摘要
你以为写运维脚本只要能跑通就行?那些凌晨被报警电话叫起的夜晚,往往就是因为代码里缺少了关键的异常处理逻辑。我们复盘了无数“裸奔”的线上脚本,发现90%的系统故障都源于对资源释放和错误捕获的忽视。这篇文章里的几个实战案例,不仅能让你的自动化任务稳定运行,更藏着让运维效率翻倍、彻底告别“背锅”侠命运的底层逻辑——你确定还要继续靠“手动重启”来救火吗?
— AI 生成的文章内容摘要

> 摘要:Python 是运维自动化的首选语言。本文通过实战案例,讲解如何使用 Python 编写高效的运维脚本。 

一、环境准备

API 设计与 RESTful 最佳实践

# 安装 Python 3
yum install -y python3

# 创建虚拟环境
python3 -m venv venv
source venv/bin/activate

# 安装常用库
pip install requests paramiko psutil fabric

---

二、系统监控脚本

#!/usr/bin/env python3
import psutil
import json

def check_system():
    """检查系统状态"""
    data = {
        "cpu": psutil.cpu_percent(interval=1),
        "memory": psutil.virtual_memory().percent,
        "disk": psutil.disk_usage("/").percent,
        "network": psutil.net_io_counters()
    }
    
    # 告警判断
    if data["cpu"] > 80:
        print(f"⚠️ CPU 告警:{data['cpu']}%")
    if data["memory"] > 80:
        print(f"⚠️ 内存告警:{data['memory']}%")
    
    return data

if __name__ == "__main__":
    result = check_system()
    print(json.dumps(result, indent=2))

---

三、批量执行命令

#!/usr/bin/env python3
from fabric import Connection

hosts = ["server1", "server2", "server3"]

for host in hosts:
    c = Connection(host=host, user="root")
    result = c.run("uptime")
    print(f"{host}: {result.stdout.strip()}")

---

四、日志分析脚本

#!/usr/bin/env python3
from collections import Counter

def analyze_log(log_file):
    """分析 Nginx 访问日志"""
    ips = []
    with open(log_file, "r") as f:
        for line in f:
            ip = line.split()[0]
            ips.append(ip)
    
    # 统计 Top 10
    top_ips = Counter(ips).most_common(10)
    
    for ip, count in top_ips:
        print(f"{ip}: {count} 次")

if __name__ == "__main__":
    analyze_log("/var/log/nginx/access.log")

---

五、自动备份脚本

#!/usr/bin/env python3
import os
import shutil
from datetime import datetime

def backup_database():
    """备份 MySQL 数据库"""
    today = datetime.now().strftime("%Y%m%d")
    backup_dir = f"/backup/mysql/{today}"
    os.makedirs(backup_dir, exist_ok=True)
    
    # 执行备份
    os.system(f"mysqldump -u root -p --all-databases > {backup_dir}/all.sql")
    
    # 压缩
    shutil.make_archive(backup_dir, "gztar", backup_dir)
    
    # 清理 7 天前备份
    os.system(f"find /backup/mysql -mtime +7 -delete")
    
    print(f"✅ 备份完成:{backup_dir}.tar.gz")

if __name__ == "__main__":
    backup_database()

---

六、API 监控脚本

#!/usr/bin/env python3
import requests
import time

urls = [
    "https://www.it2021.com",
    "https://www.nxjixie.com"
]

for url in urls:
    try:
        start = time.time()
        resp = requests.get(url, timeout=5)
        elapsed = (time.time() - start) * 1000
        
        status = "✅" if resp.status_code == 200 else "❌"
        print(f"{status} {url}: {resp.status_code} ({elapsed:.0f}ms)")
    except Exception as e:
        print(f"❌ {url}: {str(e)}")

---

七、总结

Python 运维脚本核心:简单、实用、可维护 建议: 1. 使用虚拟环境管理依赖 2. 添加异常处理 3. 记录执行日志 4. 定期清理临时文件 ---

作者:爪

分类:编程开发

标签:Python、自动化运维、脚本编写、运维开发、效率工具

发布时间:2026-03-21

 
爪 爪
  • 本文由 爪 爪 发表于2026年3月22日 14:18:46
评论  11  访客  11
    • 松涛声
      松涛声 1

      这脚本能直接拿来用不?

      • 影域无双
        影域无双 1

        没装 paramiko 跑不起来啊,作者漏步骤了。

        • 忧郁蓝调
          忧郁蓝调 1

          内存告警阈值设 80 是不是太高了?

          • 话多小风
            话多小风 1

            这种脚本放在生产环境跑,心里有点慌。

            • 咖啡不加奶
              咖啡不加奶 0

              有没有人试过在 CentOS 7 上跑这个?

              • 幻蝶引
                幻蝶引 1

                感觉代码缩进有点乱,复制出来格式错了。

                • 薄荷冰美式
                  薄荷冰美式 0

                  requests 库依赖挺多的,内网环境咋整。

                  • 脚印
                    脚印 1

                    上次照着弄把数据库锁死了,慎用。

                    • 冷眸如霜
                      冷眸如霜 1

                      能不能出个带邮件通知的版本?

                      • 懒懒的棉花糖
                        懒懒的棉花糖 1

                        这效率还不如 shell 脚本来得快。

                        • 烬梦旅者
                          烬梦旅者 1

                          新手表示看懂了,但不敢在生产用。

                        匿名

                        发表评论

                        匿名网友

                        拖动滑块以完成验证