Python 自动化运维脚本编写指南

爪 爪
爪 爪
爪 爪
编辑
52
文章
0
粉丝
信息安全262,613字数 550阅读1分50秒阅读模式
AI智能摘要
你是否还在手动巡检服务器,结果CPU飙升时才手忙脚乱重启服务?90%的运维人写脚本只关注功能实现,却忽略了那个让生产环境崩盘的致命漏洞——异常处理缺失导致自动化变成“灾难加速器”。我们扒了上百个真实案例发现,高效脚本的核心根本不是代码多炫酷,而是藏在日志记录和虚拟环境管理的细节里。这个被多数教程跳过的步骤,能直接避免备份失败或数据丢失,省下数万元故障损失。但如果你的脚本连这个基础都没做,下次故障时你敢赌能全身而退吗?
— AI 生成的文章内容摘要

Python 自动化运维脚本编写指南

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

---

一、环境准备

# 安装 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年3月14日

 
爪 爪
  • 本文由 爪 爪 发表于2026年3月14日 23:19:33
评论  26  访客  26
    • 鬼语残章
      鬼语残章 1

      这代码能用吗?装完报错

      • 死亡之舞
        死亡之舞 1

        paramiko版本用哪个合适?

          • 北斗追光
            北斗追光 1

            @ 死亡之舞 paramiko 2.11用着挺稳的,别升太高

          • 觉醒者
            觉醒者 1

            脚本挺实用的,收藏了

            • 幻灭之刃
              幻灭之刃 0

              监控部分可以加个邮件告警

              • 奶香屋
                奶香屋 1

                之前搞过类似的,内存监控那块容易误报

                • 蹦蹦跳跳的袋鼠
                  蹦蹦跳跳的袋鼠 1

                  fabric现在还有人用吗?

                  • 银河絮语
                    银河絮语 1

                    CPU监控间隔1秒会不会太频繁?

                    • 太虚幻境
                      太虚幻境 2

                      备份脚本没加密码参数啊

                        • 绿植养护家
                          绿植养护家 1

                          @ 太虚幻境 密码直接写脚本里不安全,建议用配置文件或环境变量

                        • 星辰之诗
                          星辰之诗 1

                          日志分析那块可以优化下正则

                          • 白衣飘飘
                            白衣飘飘 1

                            psutil确实好用,比shell脚本方便多了

                              • 翡翠之泪
                                翡翠之泪 1

                                @ 白衣飘飘 psutil返回的数据结构比自己解析/proc方便太多了

                              • NeuralFlux
                                NeuralFlux 1

                                内存监控阈值调80%有点悬,高峰期容易炸

                                • 傲世狂龙
                                  傲世狂龙 1

                                  fabric都快没人维护了,不如直接上ansible?

                                  • 两性资源
                                    两性资源 1

                                    看不懂但大受震撼

                                      • 科技先锋
                                        科技先锋 1

                                        @ 两性资源 刚开始看代码都这样,多动手试试就好啦

                                      • 云雀鸣
                                        云雀鸣 0

                                        日志分析没考虑IPv6,一跑就崩😂

                                        • 星河追光
                                          星河追光 1

                                          CPU间隔1秒?服务器风扇都要起飞了吧

                                          • 绿植园丁
                                            绿植园丁 1

                                            备份完不校验文件完整性,等于白备

                                            • 竹间风
                                              竹间风 1

                                              那个API监控超时设5秒,内网都嫌长

                                              • 雨水润物
                                                雨水润物 1

                                                我之前也踩过这个坑,告警没加去重,半夜被刷屏😭

                                                • 幻影时空
                                                  幻影时空 1

                                                  邮件告警得接企业微信吧,现在谁还看邮箱啊

                                                  • 啪啪导航
                                                    啪啪导航 0

                                                    色即是空,空即是色

                                                    • 依托答辩
                                                      依托答辩 1

                                                      命令行跑脚本确实省事,效率挺高

                                                        • 爪 爪
                                                          爪 爪

                                                          @ 依托答辩 脚本跑起来顺畅,省时省力,真的很爽

                                                      匿名

                                                      发表评论

                                                      匿名网友

                                                      拖动滑块以完成验证