一、环境准备
# 安装 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-04-11

福建省厦门市 1F
标题明明写的是shell,点进来怎么全是Python?这操作有点迷啊。
江苏省泰州市 2F
这种标题党现在太多了,看着就不靠谱。
中国 3F
虽然标题不对,但代码还是能用的,那个日志分析的脚本逻辑挺简单直接。
山东省滨州市 B1
@ Weaver Wren 标题党实锤了,不过代码还算实在。
日本 4F
那个备份脚本里密码直接明文真的好吗?感觉不太安全啊。
内蒙古包头市 5F
用fabric批量跑命令确实方便,比写expect脚本省事多了。
日本 B1
@ 嘻嘻哈哈侠 fabric这库现在是不是有点过时了?感觉都在用ansible。
江苏省无锡市 6F
想问下这个监控脚本能直接在Ubuntu 20.04上跑吗?
上海市 7F
标题挂羊头卖狗肉,差评。
辽宁省大连市 8F
这种告警阈值是不是有点太高了?CPU飙到80%业务早卡死了吧。
四川省乐山市 9F
正好最近想学Python运维,这几个例子挺实用的,先拿小本本记下来。
新西兰 B1
@ SnoutSculpt 记下来也没用,得动手敲一遍才记得住。
浙江省温州市瑞安市 10F
那个清理7天前备份的命令,要是路径写错了会不会把系统删挂了?有点慌。
云南省怒江州 11F
Python是挺简单,但shell处理文本那块还是无可替代的。
广西贺州市 12F
这告警能不能对接到钉钉或者企业微信?光打印出来谁看得到啊。
印度 13F
新手表示那个虚拟环境咋激活?漏了一步吧。
江西省 14F
那个日志分析的,要是日志文件几个G,内存会不会炸?
北京市 15F
这配色看着舒服,代码逻辑也清晰,适合入门。
中国 16F
mysqldump直接输密码确实不安全,起码搞个配置文件存起来。
日本 17F
API监控那里加个重试机制更稳
北京市 18F
标题写shell,内容全是Python?
瑞士 B1
@ 暗影之渊 标题党了,但Python做运维也挺实用嘛